Revert readline optimization and add test
rustc: Add legacy_records field to the type context
rustc: In lint, forbid structural records unless legacy_records is on
Add #[legacy_records] crate attribute

In rustc, rustdoc, rusti, syntax, and std.
core: Allow legacy records in in a few modules

Because of macros, #[allow(structural_records]] in
extfmt, gc, os, pipes, and run. Will need a snapshot.
compiletest: Allow legacy records

But also remove most uses of structural records.
testsuite: Add #[allow(structural_records)] to pipes tests

These will require a snapshot.
testsuite: Allow structural records in two tests that use pipes
syntax: Don't add an extra space before the last comma...

...when printing struct update expressions.
rustc: Check struct field types when heap memory lint checks are enabled
testsuite: Remove structural records from remaining compile-fail tests
testsuite: De-record pretty tests
testsuite: De-record most bench tests
Add support for Ubuntu named clang packages.

Ubuntu's clang packages have additional information appended to the end of
the version.

- Building Rust v0.5 with clang v3.0-6ubuntu3 fails.
- Building Rust v0.5 and incoming with clang v3.1-5ppa (backported from Debian)
works.

Closes #4441.
fix #2673: avoid visiting the same crate twice
Fix the len() method on LinearMap during popping
Merge pull request #4672 from alexcrichton/linearmap-len-fix

Fix the len() method on LinearMap during popping
libstd: Remove "dual impls" from the language and enforce coherence rules. r=brson

"Dual impls" are impls that are both type implementations and trait
implementations. They can lead to ambiguity and so this patch removes them
from the language.

This also enforces coherence rules. Without this patch, records can implement
traits not defined in the current crate. This patch fixes this, and updates
all of rustc to adhere to the new enforcement. Most of this patch is fixing
rustc to obey the coherence rules, which involves converting a bunch of records
to structs.
librustc: Disallow trait bounds in types, enumerations, and structure definitions. r=tjc
librustc: De-implicit-self the visitor. r=graydon