compiler: Special case self-recursive lambdas

Instead of using our generic logic of building an initially undefined
mutable for a self-recursive procedure create a KnownProcedure inside
the lambda's body pointing to itself.

This has the restriction of not being able to modify the procedure's
signature after planning has begun. However, this is still much more
efficient than calling through a mutable and trampoline. It also allows
tail recursion in some situations.