Implements bracket-balance checks and parse speed improvements.

I saw the lone "FIXME" comment and could not resist trying to help.  

The approach I ended up using is a direct search through the input string rather than a more complicated regular expression.  `ParseHex` is now several times faster as a result, and no longer requires the extra array creation and copy that was caused by `hex.DecodeString`.

Using a directly-coded search has also allowed the error messages to become slightly more descriptive.

Tests have been added to confirm the functionality.