Add id to ast::Arm: fix omission in libregex_macros for bootstrapping.
ast refactoring: unify PatWild and PatWildMulti into one variant carrying a flag.
rust-needsdrop: Generalize gather_moves to be able to represent moves into wildcard patterns.
Updates to the root testsuite.

In particular I am trying to fine-tune how `_` wildcard is handled,
which in my scheme will be context-dependent on the overall pattern,
in terms of whether it can introduce an implicitly handled
drop-obligation (from being in a match by-move context), or if it is
just an "ignore" (from being in a match by-ref context).
Add support for moving into wildcards when truly necessary.

The tricky thing here is properly defining "truly necessary."
For example, given:

`fn foo<X>(t: &(i8, X)) -> i* { let &(a, _) = t; ... }`

since the left-hand side is merely copied out of `t`, presumably the
`_` should not be treated as a move of the `X` on the right-hand side
of the tuple, so that this would be legal:

`fn foo<X>(t: &(i8, X)) -> i* { let &(a, _) = t; let &(b, _) = t; a + b }`

while in this case:

`fn foo<X>(t: &(X, X)) -> i* { let &(a, _) = t; ... }`

since the left-hand side is now established via a move, it seems most
sensible to just say that all of `t` is moved, and thus the pattern
`_` will be a move of `t` into `_`.

Then again, this might conflict with some of Niko's ideas about what
the rules should be; I need to review some of his earlier notes and
our dialogues to check about this.