Fix type handling and sizeof.
- "sizeof int" is not valid, "sizeof (int)" is.
- Support "sizeof (int*)", etc.
- Introduce a "typespec" token node type for handling type strings like "int *".
- Make everything a bit complicated by specializing handling of sizeof, since
  something like "(int)" would normally be considered a typecast, but for a
  sizeof convert the would-be typecast token into the typespec of the sizeof.
- Disallow type-ish things as identifiers, previously something like "int + 1"
  would be accepted and would treat "int" as an identifier.  Now invalid.