Add test for bulk documents
Use generics instead of abstract types

Both are almost equal, at least they are more than similar.
Using abstract types in our case is more tedious because it requires to
be defined at several places when one wants to add a new feature
inheriting from a database.
This is kind of annoying because the one is, for now, exclusively me,
and I don't like to be annoyed by myself. So now that's done.

It should not change anything for client code importing packages `async,
`control` or `sync`. It may change something if someone wrote another
implementation of this interface, but there is nobody I am aware of.
Cleanup formatting

Make use of the scalariform plugin for sbt to format source code. This
is done mostly according to the Scala Style Guide [1].
From now on, always check that the formatting is correct before pushing
or requesting pull.

[1] http://docs.scala-lang.org/style/