Unboxed closures

A relatively complete description of by reference closures that aims to encompass entirety of current thinking, except for bound lifetimes.

cc @pcwalton
To clarify, with the type sugar proposed below this would look like `fn foo(x: impl |int|->int) -> impl |int|->int {`, correct?