Replace hand-rolled code with try_parse
Use a macro for easy zero-or-more patterns
Use meaningful variable names for the macros
No need for zero-or-more to return explicitly
Introduce a type alias for returned parse results
Remove "Parsed" from all the type names

Since we are in the parser, I think it's safe to assume. Also inlined
the reference types into the enum because there wasn't a meaningful
name difference.
Correct some indentation