Merge pull request #24 from velour/dev/ppmuststring

Use pp.MustString.
Distribute struct fields.

Instead of each field declaration containing multiple identifiers,
each has only one. When multiple identifiers are specified for a
single type and tag, they are distributed over the identifiers,
creating multiple FieldDecls. This simplifies the AST, making it
easier to work with it later.
Distribute parameters.

Similar to distributing struct fields, it makes the data structure
simpler and easier to work with.
Pluralize Signature.Results.
Use the correct location when a function has no return value.
Remove the ParemeterList AST node.

This greatly simplifies the representation of functions, methods, and
anything using a Signature. The cost is that we lose a bit of token
location information. Specifically, before this change, we had the
location of the '(' and ')' tokens for any parameter list. Now, we
only have the location of the start and end of a signature. This seems
like a good trade; I don't see the location information of Signatures
being too useful.
Fix a comment.
Merge pull request #25 from velour/distribute_types

Simplify the AST's representation of types.
Change fields named "Name" to "Identifier."

Getting the name via s.Name.Name was too annoying. Now these fields
are embedded Identifier types, so s.Name can be used directly.
Merge pull request #26 from velour/rename

Change fields named "Name" to "Identifier."
Add the TypeName node. Identifiers don't implement Type.

I've gone back and forth on this, but I think that this approach is
best. Last time there were TypeName nodes, Types were not Expressions.
This didn't work, because whether something is a type or an expression
can be ambiguous at parse time. So, I removed TypeName nodes (among
other things) and double-purposed Identifiers. That was the state just
before this commit. However, this would be a hinderance at Check time.

With this commit, Identifiers and Selectors do not implement Type.
They are only expressions. Instead, TypeName covers both qualified and
unqualified type names. There are now just a small number of isolated
places where the Check pass needs to determine if an Identifier or
Selector should be replaced with a TypeName instead. For example, in
the expression a(5), 'a' can be either a type (type conversion) or a
function (function call). There are only about two such places.
Merge pull request #27 from velour/typename

Add the TypeName node. Identifiers don't implement Type.
Initial commit of the sym package and type identity.