WIP [NX-525] shared database support

https://issues.sonatype.org/browse/NX-525

also addresses:
https://issues.sonatype.org/browse/NEXUS-6698
https://issues.sonatype.org/browse/NEXUS-6619
IIRC, and @mcculls correct me if I'm wrong, but if using @Singleton provider, Guice will only call get() once to create the instance, then will cache the result.  So if folks use the Guice provider to get the instance there shouldn't be any contention.