Patch with my latest status. It won't compile yet, as I haven't updated all tests to reflect the new API. Will work on that next.
This combines core discovery and persistence into the CoresListPersistor interface. All persistence logic is removed from CoreContainer and ConfigSolr and put into the two implementing classes of CorePropertiesPersistor and SolrXMLPersistor.
CoreDescriptor is tidied up a bit, and made effectively immutable (would be nicer to make it really immutable, maybe with an ImmutableProperties class). The original pre-substitution parameters are stored as well as the values after substitution, which makes persistence a lot easier (you just read from the original values).
Solr.xml persistence is also made a lot simpler, by just storing everything around the <cores/> tag as a flat string, and only updating the <core> tags. So you don't need to remember to add new solr.xml parameters to core persistence logic any more, and things like comments will be preserved.
This is a pretty big patch, and there's still a fair amount to do, but I'd be grateful for some preliminary reviews. I think it simplifies the whole core discovery/persistence logic a lot.