Unboxed closures

A relatively complete description of by reference closures that aims to encompass entirety of current thinking, except for bound lifetimes.

cc @pcwalton
Are we assuming the coherence system from your RFC about traits, i.e. `impl<T: Foo> Bar for T` doesn't conflict with *every* other `impl` of `Bar`, only for those types which also `impl Foo`?

In that case wouldn't this work?

    impl<T: FnShare> Fn for T

    impl<T: Fn> FnOnce for T

If a type impls `FnShare`, the first `impl` will give it `Fn`, and because it now impls `Fn`, the second `impl` will also give it `FnOnce`. If a type only impls `Fn` then only the second `impl` will match, and it all works out.