Merge pull request #41 from velour/predeclared

Use different types for different predeclared identifiers.
Add Identifier.decl.
Add some type property functions.

Wildly incomplete and not well tested.
Add Expression.Type.

This required renaming fields of a bunch of AST nodes so that they weren't called Type.
Add TestTypeUnderlying.
Add TestTypeIdentical.
Implement more of Type.Identical and its test.