Clean up several things:

- Fixed a bug where symbol/metadata tables weren't always popped at the
  right time during static checking.
- Only allow identifiers on the right hand side of a member selection;
  allowing arbitrary expressions does not make the parsing any more
  flexible (since . is already this highest-precedence operator), and
  this removes a bunch of complexity.
- Conversely, allow arbitrary expressions on the left-hand side of an
  assignment. This does make parsing much more flexible, and may be
  useful in the future for unpacking assignment, etc.