Unboxed closures

@nikomatsakis r?
Nit: can you pull this complex stuff out into a separate fn?