Unboxed closures

A relatively complete description of by reference closures that aims to encompass entirety of current thinking, except for bound lifetimes.

cc @pcwalton
There is a serious issue with using trait inheritance, which is the vtable size. It **must** be kept to 1 method, otherwise performance will suffer (though, `Fn` and `FnShare` would use the same function for their methods, so something may be done with that in mind).

I wonder if what @anasazi is pointing out still holds if closure bodies were to implement either `FnOnce`, `FnOnce + Fn` or `FnOnce + Fn + FnShare` (instead of just one trait).
I believe not, because I don't see the following making sense:
> Encourage people to put an artificially restrictive `Fn` bound on an otherwise `FnShare`able closure ...
`Fn` wouldn't be restrictive, as all `FnShare` closures would also implement it.