Avoided increased memory consumption.

The graph walker now does not cache results - it's a local var instead of a field on a default lenient configuration. Let's see how it impacts the performance. For sure it reduces the memory hit because we no longer hang onto the the resolved dependency instances.
Added some diagnostics
Don't make ComponentMetadataDetails extensible.
Removed TODO
Pass LatestStrategy into DefaultDependencyResolver the same way as VersionMatcher is.
Simplified ClassLoaderVisitor.
Moved some classes from core to baseServices.
use consistent spelling for `customize` throughout docs and codebase

- some minor other spelling improvements along the way
Refactored the way new resolution result is built so that it is easy to serialise the new model.
Refactoring - used the static fields for better clarity.
Small refactoring - used specific exception.
Refactoring - removed one public constructor.
Small refactoring - used specific exception.
Some refactoring, removed redundant listener that turns out not necessary. Some rename job.
Steps towards serialising the new dependency graph model (we already stream the old model).
Added some stats to the resolution results caching. Tweaked the cache's max items.
Improved how the resolution result stats are presented, introduced buffered input/output streams (streaming resolution results).
ToolChainRegistry permits configuring multiple tool chains

- Plugins register default tool chain instance
- Default tool chains are overwritten by configured tool chains
- No integration test coverage yet
Made it easier to work with C++ HelloWorld app sources in integ tests
Fix ToolChainRegistry to that configuration works correctly

- Still not sure if the model/implementation is right: straw-man