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
It would be great if this list could be automatically documented _without_ having to retype the whole thing in the `new` constructor (L65).

This might just be a shortcoming in `rustdoc` for now :(.