Implement the `Fn` trait for bare fn pointers in the compiler

Implement the `Fn` trait for bare fn pointers in the compiler rather
than doing it using hard-coded impls. This means that it works also
for more complex fn types involving bound regions.
Since you cloned the sig above, why not just move `inputs` and `output` out?