syntax: modernise attribute handling in syntax::attr.

This does a number of things, but especially dramatically reduce the
number of allocations performed for operations involving attributes/
meta items:

- Converts ast::meta_item & ast::attribute and other associated enums
  to CamelCase.
- Converts several standalone functions in syntax::attr into methods,
  defined on two traits AttrMetaMethods & AttributeMethods. The former
  is common to both MetaItem and Attribute since the latter is a thin
  wrapper around the former.
- Deletes functions that are unnecessary due to iterators.
- Converts other standalone functions to use iterators and the generic
  AttrMetaMethods rather than allocating a lot of new vectors (e.g. the
  old code would have to allocate a new vector to use functions that
  operated on &[meta_item] on &[attribute].)
- Moves the core algorithm of the #[cfg] matching to syntax::attr,
  similar to find_inline_attr and find_linkage_metas.

This doesn't have much of an effect on the speed of #[cfg] stripping,
despite hugely reducing the number of allocations performed; presumably
most of the time is spent in the ast folder rather than doing attribute
checks.

Also fixes the Eq instance of MetaItem_ to correctly ignore spaces, so
that `rustc --cfg 'foo(bar)'` now works.
Changed methods on UDP sockets and TCP/UDP watchers to &mut self to reflect that libuv may change the underlying handle.
Missed the methods of UdpWatcher.
std::rt: Remove an obsolete FIXME. #7757
extra: add some microbenchmarks
mk: Remove CFG_INSTALL_SNAP logic. #2664
smallint{map,set}: replace iterators with DoubleEndedIterator

Also changed the tests to iterate over sparse maps/sets.
Add tests for issues which can be closed

Closes #5275, $4547
str: Implement Container for ~str, @str and Mutable for ~str

~str and @str need separate implementations for use in generic
functions, where it will not automatically use the impl on &str.
iterator: Add .cycle() to repeat an iterator
iterator: Let closure-less iterators derive Clone
iterator: Add test for .cycle()
std: Implement Clone for VecIterator and iterators using it

The theory is simple, the immutable iterators simply hold state
variables (indicies or pointers) into frozen containers. We can freely
clone these iterators, just like we can clone borrowed pointers.

VecIterator needs a manual impl to handle the lifetime struct member.
dlist: Implement Clone for immutable iterators
auto merge of #7908 : anasazi/rust/fix_udp_mut, r=brson
auto merge of #7910 : brson/rust/rm-fixme, r=graydon
auto merge of #7882 : blake2-ppc/rust/iterator-clone, r=thestinger

Implement method .cycle() that repeats an iterator endlessly

Implement Clone for simple iterators (without closures), including VecIterator.

> The theory is simple, the immutable iterators simply hold state
> variables (indicies or pointers) into frozen containers. We can freely
> clone these iterators, just like we can clone borrowed pointers.
rm obsolete no-op lints
librustc: Remove `pub extern` and `priv extern` from the language.

Place `pub` or `priv` on individual items instead.
auto merge of #7896 : pcwalton/rust/pub-extern, r=pcwalton

r? @nikomatsakis