Fluent Aggregation Builder

This PR adds a fluent aggregation builder handy for creating Mongo aggregation pipelines with out having to create JSON by hand. You use the aggregation the way you would assemble a mongo query pipeline in JSON Best illustrated by example:

Take for instance a **customer** collection, with each customer having a nested array of users, eg:
```
{
   _id : "53051e678927e20c10f13295",
   name: "Foo Inc."
   users: [
     { 
       email: "bob@foo.com",
       status: "Active"
      },
      { 
       email: "dave@foo.com",
       status: "Deleted"
      },
    ]
}
```

Lets say you wanted to know many users there are by statys (ie 4 active, 3 Deleted etc):
```
AggregationBuilder<SimpleAggregationCount> builder= new AggregationBuilder<SimpleAggregationCount>();
		builder.unwind(new UnwindAggregation("users"))
		.group(new GroupAggregation("users.status").withCount("count"));		
		AggregationResult<SimpleAggregationCount> aggregationResult = collection.aggregate(builder.build(SimpleAggregationCount.class));
```
The equivalent query in mongo is

```
db.customer.aggregate({$unwind:"$users"}
, {$group:{
    _id:"$users.status"
    , count:{$sum:1}
    }
})
```