MongoDB storage driver

This supersedes #94 (cc: @iampersistent). 
Tailing would require that we always have a capped collection. I suppose we could check once when the driver is constructed and assume the collection will be the same for the duration of our execution. This is reasonable, as users shouldn't be dropping and recreating their `messages` collection while a system is running.

Some caveats of capped collections (from [here](http://docs.mongodb.org/manual/core/capped-collections/#recommendations-and-restrictions)):

 * We can't grow documents. This should be fine because our updates merely flip the `visible` field.
 * We can't delete objects. This means we'd either rely on `visible` as the `deleted` flag or introduce a new field to track deleted messages. Since the driver has no way to set `visible` from `false` to `true`, I think using `visible` to track deleted status is fine. This does mean that `acknowledgeMessage()` would be a no-op if we're dealing with a capped collection. I think we can still delete messages from non-capped collections, as we wouldn't want those to grow indefinitely.