Fixed a typo in a comment
Support nested branches

Use 'createParserForwardedToRef' to allow recursive parser definitions.

The content of a branch, 'branchContent' is any combination of atom chains and
other branches.
A branch, 'branch', is a branchContent between brackets.

We can't define these normally because they both reference each other. (Remember
'let rec' is for recursive functions...these are values!)

'createParserForwardedToRef' returns a tuple. The first item is a parser, the
second is a reference cell 'pointing' to another parser. The first parser forwards
everything to the parser in the reference cell and initially the reference cell
just holds a dummy parser.

This means we can reference the branch parser in the definition of 'branchContent'
before defining the parser itself by later updating the parser in the refernce cell
with the assignment operator, :=

Notice the use of 'ignore' in some parsers. The results of the parsers aren't
really being used outside of the user state, so they're all of type
Parser<unit, State>. This makes the atomChain of type Parser<unit list, State>
and the branchContent therefore Parser<unit list list, State> which is getting
silly. Passing the results of the parsers to 'ignore' turns them back into
Parser<unit, State>.