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 a list of customers and how many users they have by type (ie 4 active, 3 Deleted etc):
```
AggregationBuilder<SimpleAggregationCount> builder= new AggregationBuilder<SimpleAggregationCount>();
		builder.unwind(new UnwindAggregation("users"))
		.match(new MatchAggregation().in("users.status", status))
		.group(new GroupAggregation().withCount("count"));		
		AggregationResult<SimpleAggregationCount> aggregationResult = collection.aggregate(builder.build(SimpleAggregationCount.class));
```
should replace all the tabs with spaces to be consistent with the existing code