Introducing SnakFormatter and SnakFormatterFactory

This introduces a central registry and factory for formatters.
That allows us to use a generic SnakFormatter instance to render
any Snak in any format, while maintaining the mapping of formatters
to data types and value types in a central place.

NOTE: this just introduces the new classes, it does not change existing
functionality. Usage of the new facility will be introduced in subsequent
changes.

Bug: 53745
Change-Id: I0fa3746308562f2d4a545711570175cd8b6dff2e