Support registering custom content types

This is a smaller PR than #32 and focuses only on the content type engine proposal.  I'll bring back the other changes after we get this one resolved.  The `PlainTextEngine` is now in core and registered in the Application constructor.