Great big buffer tagging revamp.

Tagging regions of a buffer with arbitrary objects is super useful, so I want
to enable it in the general case. So I did. The basic idea is that you can tag
a region of a buffer with an arbitrary object and then look up your tags based
on the runtime type of the tag object.

I subsumed the CSS style tagging into this new general tagging mechanism, but
did not subsume the Syntax tagging therein. The reason is pertinent: syntax
tagging needs to support extremely fast lookup (it is used to guide character
by character searches through the buffer), but basically every other kind of
buffer tagging need not be so fast.

Either the tags are like CSS in which case you never look them up, you just
enumerate them line by line, or they're looked up by character, but not with
such crazy frequency that a linear scan through a dozen or two instances is
going to make a difference.

For example, the Codex stuff can now tag regions of the buffer with the Def/Ref
metadata directly instead of maintaining a separate index, and when you say
"show me the docs for this element" or "navigate to this element's definition",
"this element" is right there in the buffer, you just grab it and go.