Full Refactor

In preparation for further refactors, the parser of a format string has
been moved to a new FormatParser struct and much of the parsing logic has
been simplified and consolidated.

Additionally, the grammar of the format string has been changed to close
attribute applications with a single `@` rather than `@@` as this allows
the parser to be unambiguous with only single lookahead.

This PR also changes Logger to use Errors instead of printing on failure.

Fixes #42
Fixes #35
This can be logged as an issue.