Make ~fn non-copyable, make &fn copyable, split barefn/closure types,
correct handling of moves for struct-record update.

Part of #3678.  Fixes #2828, #3904, #4719.
auto merge of #4810 : nikomatsakis/rust/owned-fn-noncopyable, r=nikomatsakis

Part of #3678.  Fixes #2828, #3904.

r? @brson