Support multiple document types

This adds support for multiple document types in dart-collab. 

Implementors of additional document types will implement Document and DocumentType subclasses, as well as the message parsers and operation transforms required for the new document type.

This change breaks out the existing text document implementation into a new package, text with the implementation renamed to TextDocument.