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.
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.
Add a BUG comment.

It describes how UnaryOp.Fold should be type aware.
Make rune and byte aliases for int32 and uint8 respectively.

They are not their own types, merely references to the int32 and uint8 declarations.
Use FunctionType for the location and Signature of a FunctionLiteral.

This will make implementing the FunctionLiteral.Type method more sane.