Experimental and incomplete implementation of Mongo emulation layer so Mongo
clients can connect to Usergrid.

There are a number of drivers and tools for talking to MongoDB, which has a
data model that is very similar to that of Usergrid. In order to make it
easier for people to get started quickly with Usergrid, it's desirable for
them to be able to integrate it very quickly into their existing applications.
The goal here is to support the Mongo native wire protocol and to map enough
of the query and CRUD operations so that this can happen.

While Mongo is a full-featured database, in practice only a small subset of
it's commands are used. To verify this, a Mongo proxy was written at:

org.apache.usergrid.mongo.testproxy.MongoProxyServer

This proxy serves as a "man in the middle" and decodes and logs all Mongo
commands sent to and from an application and MongoDB. Using a couple of GUI
tools as well as the Mongo command-line client, we were able to see that only
a handful of commands are commonly used for listing databases, collections,
and for querying content.

Mongo uses a wire protocol described here:

http://www.mongodb.org/display/DOCS/Mongo+Wire+Protocol

Mongo uses BSON, which is a binary JSON format, as part of the wire protocol.
For compatibility, we're using the BSON encoder from the Mongo Java driver:

https://github.com/mongodb/mongo-java-driver/

However, since we're using Jackson as our JSON library for the rest of
Usergrid, the idea is to switch over to Bson4Jackson:

https://github.com/michel-kraemer/bson4jackson

The commands Mongo supports are listed here:

http://www.mongodb.org/display/DOCS/List+of+Database+Commands

Mongo's system metadata is listed here:

http://www.mongodb.org/display/DOCS/Mongo+Metadata

Queries are described here:

http://www.mongodb.org/display/DOCS/Mongo+Query+Language


Mapping Usergrid Multi-tenancy to Mongo Security

First steps are to simply be able to handle a client login and map it to a
Usergrid account.

Authentication is described here:

http://www.mongodb.org/display/DOCS/Security+and+Authentication
http://www.mongodb.org/display/DOCS/Implementing+Authentication+in+a+Driver

A user who authenticates against the Mongo 'admin' account will be actually
logging in as a Usergrid admin user who is a member of one or more Usergrid
accounts, each of which contains a set of applications that user is able to
administer.  While they list the databases via the Mongo API, what they will
be seeing is the aggregate list of the applications for all the accounts they
are members of.

For any database (Usergrid application), they'll be able to list the collections.

Note: Internally, Mongo refers to it's collections as "namespaces", which
is a potential point of confusion between previous versions of Usergrid which
used the term "namespace" to describe applications.


