compiler: Try harder to union procedure types

When we encountered multiple procedure types we would always convert
them to TopProcedureType. This is technically correct but we can do
better: find the most general procedure type and fallback to
TopProcedureType if we find disjoint types.

This allows for better type checking and code generation for phied
procedures.
Remove unused (import)s from functional tests

- (llambda test-util) is implicitly imported in all tests

- (scheme inexact) was included in some places where it wasn't used
compiler: Simplify PlanInvokeApply

- Remove selfTempOverrideOpt and instead use
  InvokableProcedure.withSelfValue

- Get rid of unused argListType local value
compiler: Remove stale comment

We now have full rest argument support