improve clone_from_slice performance
add intmax
Part of #6993. Moved a bunch of uses of Ident to Name
auto merge of #17683 : gereeter/rust/ident-to-name, r=pcwalton

This does a large chunk of #6993. It is based on top of #17654.
auto merge of #17960 : mahkoh/rust/clone_from_slice, r=pcwalton

Old vs. New vs. Vec::push_all

```
test slice     ... bench:   3091942 ns/iter (+/- 54460)
test slice_new ... bench:   1800065 ns/iter (+/- 69513)
test vec       ... bench:   1804805 ns/iter (+/- 75609)
```
Add a lint for not using field pattern shorthands

Closes #17792.
auto merge of #17896 : mahkoh/rust/intmax, r=alexcrichton

Closes #17075

I don't know if this is correct. The easiest way to find out is to run the following program on all targets but I can't do it myself.
```c
#include <stdint.h>
#include <stdio.h>

int main(void)
{
	if (sizeof(intmax_t) != 8) {
		puts("ERROR");
		return 1;
	}
}
```
auto merge of #17813 : P1start/rust/lint-field-shorthand, r=huonw

Closes #17792.
Do not accept functions in enum patterns past resolve
Overhaul typechecking of patterns

Instead of checking patterns in a top-down fashion with a known
expected type on entry, this changes makes typeck establish
appropriate constraints between a pattern and the expression
it destructures, and lets inference compute the final types
or produce good error messages if it's impossible.
Update tests with the new error messages
Merge branch 'match-typeck'
Remove ty_bot from the type system

We now instead use a fresh variable for expressions that diverge.