Implement ShapePreservingBuilder. Fixes #207.

This allows us to use HAVING clauses – we can now modify a group after
some shape-preserving operation (EG, filter).

GroupBuilder also had to be modified to allow for containing _both_ a
map of fields and an in-progress field.

It also removes the fn parameter from merge, which means we now have to
[flat]map over the result.
We think this should look like this, right?
```scala
-\&/?(-\/(dv \ BsonField.Name(name)), doc)
```