Add support for aggregation framework

Idea for implementing the aggregation framework (#18) as a database command. Basic DSL contains operators used in the aggregation framework, allowing aggregation queries to be written in Scala. This command will return a regular BSONValue, to be parsed by json parsing library of choice. Each operator can create the BSON version of itself, and they are composed together to form the whole query. Example:
```scala
val command = Aggregate("content", Seq(
        Project("keywords.text"),
        Unwind("keywords"),
        GroupField("keywords.text")("count" -> SumValue(1)),
        Match(BSONDocument("count" -> BSONDocument("$gte" -> BSONInteger(6000))))
      ))
```
will produce:
```javascript
db.content.aggregate(
  {$project:{"keywords.text":1}},
  {$unwind:"$keywords"},
  {$group:{_id:"$keywords.text", cnt:{$sum:1}}},
  {$match:{"count":{$gt:1}}},
  {$sort:{"count":1}}
)
```
Open to suggestions on how to make the argument to the "Match" command suck less. Would probably require implementing most of the other database operators. Actually, if this method is accepted, my next project will probably be to implement all of the operators specified on [MongoDB's operator page](http://docs.mongodb.org/manual/reference/operator/) and use marker traits to organize them into groups (typeclasses??) specifying where they can and cannot be used (numeric comparator, aggregation operation, projection, etc.)