Add basic support for primary block attributes

Includes changes to some of the internals of parsing to support this, and
alterations to blocks (just the inclusion of a new Block attribute,
primary_attr).
Loses code coverage.
Refactored parsing to be simpler

In light of the changes for primary attribute support, the old way of handling
the parsing (post-tokenization) was not well built and needed a rewrite.
Recover test coverage for Primary Attribute blocks

Adds a couple of tests to ensure that use of Primary Attribute blocks does not
break tokenization.
Improve parsing tests on primary_attr blocks

Increases the number and kind of tests run on tokenizing and parsing Primary
Attribute blocks.