Clean how tags are parsed

The tag: li@potato[quantity=2]|taco.random would read |taco as a
separate attribute, as if it were .taco ... this commit fixes that and
at the same time actually simplifies the Component Regex (while slightly
extending the bracketRegex to make sure brackets are at the end of the
tag)
This has a mini-internal bug that for li@taco|potato[quantity=2]
quantity=2 will be read as a Context... but the tag still returns
correctly due to the irrelevance of context for that place in tag
handling.
All tags with [brackets] seem to be working as intended, though it would
be nice if someone could run a few tests and confirm that.