compiler: Better support for library procedures

This is preparatory work for introducing Scheme code to our standard
library. There are no specific unit tests for these changes but
introducing any Scheme procedure to the base library will break the
tests without this change.

- Don't codegen an unused function even if it's user defined and
  optimization is disabled. This prevent unused library procedures from
  cluttering the generated code

- Have InferArgumentTypesSuite explicitly name and reference its
  procedure and then extract it by symbol after planning. This is more
  robust than the previous method of expecting only the inferred
  procedure and the entry procedure.