[WIP] Unbox all the closures

Very early WIP branch that attempts to move all our uses of boxed closures to the new "unboxed" closures. I'll update this branch every time I reach a "milestone". By milestone, I mean that this branch passes `make check` after "unboxing" the fields/methods of a struct/trait/module. See list of milestones below:

- [x] `core::option::Option` (methods)
- [x] `core::result::Result` (methods)
- [x] `core::iter::Map` (field)
- [ ] `core::iter::Filter` (field)
- [ ] `core::iter::FilterMap` (field)
- [ ] `core::iter::SkipWhile` (field)
- [ ] `core::iter::TakeWhile` (field)
- [ ] `core::iter::Scan` (field)
- [ ] `core::iter::FlatMap` (field)
- [ ] `core::iter::Inspect` (field)
- [ ] `core::iter::Unfold` (field)
- [ ] `core::iter::TakeWhile` (field)
- [ ] `core::slice::SlicePrelude` (methods)
- [ ] `core::slice::Splits` (field)
- [ ] `core::slice::MutSplits` (field)
- [ ] ???

This is blocked on #19449, which needs to get snapshot-ed before this can land.

cc @aturon