[NEXUS-7519] Part 2 of 2: CRUD for Components & Assets

This is part 2 of 2 for
https://issues.sonatype.org/browse/NEXUS-7519

This creates and implements the ComponentStore interface in nexus-component-services, assuming a single BlobStore per Nexus node for now. This new interface is expected to be the primary one against which component/asset CRUD and query operations are done by views in NX3.

Notable changes on this branch:
* The "asset" storage class is now abstract, like "component". On further thought, I concluded that having per-format storage subclasses of Asset would lead to better schema evolvability.
* ComponentEnvelope is now in the model package and is parameterized by Component and Asset class.
* Some refactoring of the adapter package to make the class hierarchy more sane.
* In addition to the new 8 CRUD-style operations, the ComponentStore interface has taken over the responsibilities previously described by the now-deleted MetadataQueryService; these functions are very closely related at an implementation level, and it is expected that most clients will want some access to Query *and* CRUD capabilities anyway, so this simplifies things for them.
We pass these two around a lot; I'm thinking we could combine this blob tracking into a little blobTx that wraps blobStore, and (when you use it to create or delete blobs) tracks them for 'rollback/commit' purposes. That way these 'transaction scripts' can just blithely create blobs or delete them, and the notion of the undoability of these operations is hidden away, and only exposed in ComponentStorageSupport.doExecute().