Implement grouped types (with optional tokens)

To implement grouped types (like <String> or {<String->String>*}), the
notion of optional tokens was added to the FormattingWriter.

Closes #23.
Implement entry types (Key->Value)