remove some duplicated code
get rid of explicit dependencies on list desugaring in base/ to prepare for new scope rules
allow desugaring without introducing new expressions, in order to avoid creating lists unnecessarily
Push Name model of identifiers before desugaring

- Add rules for s_for, s_cases, s_method_field into resolve-scope
- Change compile() to call resolve-scope before calling desugar
- Change desugar to introduce s_globals() and s_atoms() only, no more
  s_names (this hurts testing for now)
- Add a toname() method to Names to get back to a human name that can be used
  for e.g. field access when an atom represents a constructor field in a
  variant
- Wrangle list desugaring into a new form:  the runtime now knows about the
  list module, and imports it to get access to _link and _empty.  Desugar adds
  _link and _empty references as *global* references, so they need to get
  compiled in as such in the definition of compile-structs.
- Remove the desugaring environment from desugaring, since it's no longer
  desugar's job to track whether an identifier is a var or letrec
  (resolve-scope does this now)