compiler: Move (features) generation to frontend

Instead of unconditionally generating a (features) procedure in codegen
and referencing it as a native function in base.scm create a "virtual"
library that builds the appropriate expressions. This has a few
advantages:

- The codegen mechanisms for building procedures and proper lists can be
  reused. The resulting compiler code is simpler and more obviously
  correct

- The (features) procedure and its constant data is only generated when
  it's actually used which is rather infrequently

- The earlier compiler passes (particularly the reducer) have insight in
  to the definition of the procedure and can potentially inline certain
  operations.