Add a new store type that uses a sqlite3 database, stored in rados, for
managing internal resources. The main motivation for this store is to
improve performance, specifically in the case where we need to look
up shares by fields other than the store entry key.
In this store each namespace maps to a table. Each table is managed by a
class that can store a JSON object. The shares table is specialized so
that it can index fields within the JSON and find (cluster_id, name)
pairs efficiently. This allows us to much more quickly determine if
a share's name is already in use by a different share in the same
cluster (the name may be reused in a different cluster w/o issue).
One other important factor when using this store is to use transactions,
via the transaction method (see TransactingConfigStore). If transactions
are not used this store can perform worse than the ModuleConfigStore.
When they are used (correctly) there is a good performance improvement.
Signed-off-by: John Mulligan <jmulligan@redhat.com>