Change annotation machinery to annotation/container/construct.

This breaks a fair bit of code, but the fixes are generally trivial.

What these changes _do_ let you do is to be fairly ambivalent about
exactly what bit of a data structure you're working with.

For example, you could have a handle to a subtree, or the label at that
subtree's root node, and the annotation operations would work the same
way.

Additionally, because of this flexibility, you can fmap the node-wise
operations, and have them apply over the entire subtree.

Whether the flexibility warrants the complexity is anybody's guess.

Also, I'm more than open to different names for these classes and types.
They're quite generic right now.
Update tag definitions to work with new annotation machinery.
Remove incorrect type-signature for (<->) operator.

I'll add the right one when I figure out what it's doing.