Remove usage of the #[merge] hack with int modules
Remove the #[merge] hack from the parser
Add basic atomic types
Use an enum for keywords and intern them to improve parser performance

Currently, keywords are stored in hashsets that are recreated for every
Parser instance, which is quite expensive since macro expansion creates
lots of them. Additionally, the parser functions that look for a keyword
currently accept a string and have a runtime check to validate that they
actually received a keyword.

By creating an enum for the keywords and inserting them into the
ident interner, we can avoid the creation of the hashsets and get static
checks for the keywords.

For libstd, this cuts the parse+expansion part from ~2.6s to ~1.6s.
auto merge of #6737 : dotdash/rust/static_keywords, r=pcwalton

Currently, keywords are stored in hashsets that are recreated for every
Parser instance, which is quite expensive since macro expansion creates
lots of them. Additionally, the parser functions that look for a keyword
currently accept a string and have a runtime check to validate that they
actually received a keyword.

By creating an enum for the keywords and inserting them into the
ident interner, we can avoid the creation of the hashsets and get static
checks for the keywords.

For libstd, this cuts the parse+expansion part from ~2.6s to ~1.6s.
auto merge of #6732 : Aatch/rust/atomic-types, r=brson

This pull request is more of an RFC than a finished implementation.

It adds some basic atomic types, with an interface modelled off of C++11's atomic types.

It also adds free functions that provide a slightly nicer interface for atomic operations, though they are unsafe because there isn't a way to be generic over "word-sized" types.

See also #5042
auto merge of #6722 : alexcrichton/rust/issue-4219-no-merge-hack, r=brson

Changes the int/uint modules to all use macros instead of using the `merge` attribute. It would be nice to have #4375 resolved as well for this, but that can probably come at a later date.

Closes #4219.
core: Fail with a better error message when list_dir gets an empty path

(Yes, this did happen in real life...)
testsuite: Add a test for listing the root directory...

...and don't treat Path("/") like Path("").
auto merge of #6687 : catamorphism/rust/list_dir_empty, r=catamorphism

r? @brson (Yes, this did happen in real life...)
Mark &mut parameters as noalias
auto merge of #6742 : Aatch/rust/mut-noalias, r=thestinger

This marks `&mut` function arguments with the `noalias` attribute. Since the borrow checker enforces this property, this is worth doing.

I'm not sure if the place I'm doing it in is ideal, but it generates the correct code.

Closes #6350
make the memcpy/memmove intrinsics higher-level

This allows them to make use of the type's alignment, instead of being
pessimistic and assuming it is only 1.
C++0x -> C++11
add memset32/memset64
use uninit for cast::transmute_copy
add an align parameter to call_memcpy
make transmute_copy use memcpy, and inline it
inline bump_box_refcount