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.