Two small AST changes.

1) Use FunctionType for the location and Signature of a FunctionLiteral so that it can use it as its type.
2) Change ImaginaryLiteral to ComplexLiteral.
  This will simpify complex constants that have non-zero real
  components. Without a combined ConstantLiteral type, a complex
  constant would be represented as a BinaryOp node with a FloatLiteral
  and ImaginaryLiteral component. This would make constant folding more
  difficult, as it would require checking each subexpression that is a
  BinaryOp to see if it's really a complex constant. This change simply
  replaces ImaginaryLiterals with ComplexLiterals. During parsing, the
  real component is always zero: an imaginary ComplexLiteral. During
  folding, the real component can be used instead of requiring a
  BinaryOp node to glue the two components together.

Squash with AST change.
Add the scope type and pkgDecls function.
Add a very incomplete Type.Identical implementation.
Add the BoolLiteral type.

Before this change, boolean literals were *Identifier nodes with
predeclared Declaration types and Names of either "true" or "false".
Determining if an identifier was a boolean constant was a lot of work.
Now it's easy to determine if something's a boolean constant, because
it will be a BoolLiteral node.
Start implementing Fold.