Implement proper annotation system, add publicity

Previously, annotations were just being evaluated and discarded with no
impact on the program. Now annotations are required to implement a
particular method corresponding to the item they are annotating, and
that method is passed the underlying implementation of the item to
modify at will.

This new system has been used to implement the publicity modifiers
public, confidential, readable, and writable. The former two remove and
add confidentiality respectively, whereas the latter two expose either
the reader or writer of a var. The readable annotation is not a valid
annotation on a def.

The built-in types have been split out into their own module to mirror
the exceptions and publicity modules.