Rewrite threading infrastructure, introducing `Thunk` to represent
boxed `FnOnce` closures.
Purge the hack that allows `FnOnce` to be used with a by-value self method.  Besides being yucky, it will cause problems if we try to make all traits implement themselves, which would make a lot of things in life easier. Also, it was inextricably linked to `Box`, which was not the intention.  We can work around its absence, so better to reimplement it later in a more thorough fashion.
Adjust feature gates to allow for parenthetical notation to be used
with the fn traits
Remove `proc` types/expressions from the parser, compiler, and
language. Recommend `move||` instead.
Patch rustdoc to include missing types, make the match exhaustive
to prevent such oversights in the future.
Rewrite WorkItem not to use `proc()`.
Mostly rote conversion of `proc()` to `move||` (and occasionally `Thunk::new`)
Delete tests that are either no longer relevant or which have
duplicate tests around object types.
Update guide/intro to take into account the removal of `proc`.

cc @steveklabnick
Update emacs and vi modes.
Add some tests for obsolete code, sugar used in appropriate ways.
Temporarily remove issue #14039; it is fixed and re-added by PR #19438
Stop using diagnostics to avoid merge conflicts.
auto merge of #19338 : nikomatsakis/rust/unboxed-closure-purge-the-proc, r=acrichto

They are replaced with unboxed closures.

cc @pcwalton @aturon 

This is a [breaking-change]. Mostly, uses of `proc()` simply need to be converted to `move||` (unboxed closures), but in some cases the adaptations required are more complex (particularly for library authors). A detailed write-up can be found here: http://smallcultfollowing.com/babysteps/blog/2014/11/26/purging-proc/

The commits are ordered to emphasize the more important changes, but are not truly standalone.