librustc: Use *signed* extension when converting enums to floats.

Previously, constants used unsigned extension, while non-constants used
signed extension. This unifies both paths to use signed extension.

If this breaks your code, take a deep breath, go for a walk, and
consider why you're relying on the sign extension semantics of
enum-to-float casts.

Closes #8230.

[breaking-change]
auto merge of #14786 : pcwalton/rust/enum-to-float-casts, r=alexcrichton

If this breaks your code, take a deep breath, go for a walk, and
consider why you're relying on the sign extension semantics of
enum-to-float casts.

[breaking-change]

Closes #8230.
Provide a witness pattern for non-exhaustive patterns

Fixed #4321
Check pattern refutability the same way exhaustiveness is checked
Add support for fixed size vectors in let/arg patterns

Fixes #7784
Add unreachability detection for missized patterns of fixed size vectors

Fixed #13482
Update tests with the new error messages
Fix #14393

String patterns should have a single constructor of arity 0.