Move to unboxed closures

This updates the code to work with the latest rust-nightly.
Wherever closures are taken I added a trait-bound by for the corresponding unboxed closure type.

The 2nd commit fixes up some issues where `rustc` did not seem to agree w/ nesting closures.
I ended up storing intermediate results and then calling the closure; not sure if there's a cleaner way to achieve this.

(Tested with: `rustc 0.13.0-dev (92e9e70d1 2014-12-15 19:12:44 +0000)`)