Make Attributes Immutable #80

Finish making a lot of code in the Intermediate immutable, including
Attributes.

Fixing tests for this.

This does not include type checking of attributes.

This does not yet distinguish between an attribute that is missing and
attribute that is set but not expected. The number of exceptions to be
listed in "throws" would grow large, and may need to be rethought.
Do you think we eventually will need a class to encapsulate `AttributeTypes` (ie the `Map<String, Type> types`) above? (This would be a new PR)