abstract type of the document
Some mutually recursive modules
Remove parametrisation from Document in implementation module
Move document implementation in Data.Bson.Document
Remove unused import
Remove unused import
use `document` instead of `fromList` in tests.

This allows to remove `fromList` from public API.
May be use `document` in Binary.hs as well?
Merge branch 'abstract-document'