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 is hard to comprehend at first, at might make maintenance a bit tougher.

It can probably be abstracted in a future refactor. We might want to make an issue, or leave a note about code smell.