Implement Hash for tuples of up to arity 12. Also change the style to be consistent with core::tuple

Previously the implementation of Hash was limited to tuples of up to arity 8. This increases it to tuples of up to arity 12. 

Also, the implementation macro for `Hash` used to expand to something like this:

    impl Hash for (a7,)
    impl Hash for (a6, a7)
    impl Hash for (a5, a6, a7)
    ...

This style is inconsistent with the implementations in core::tuple, which look like this:

    impl Trait for (A,)
    impl Trait for (A, B)
    impl Trait for (A, B, C)
    ...

This is perhaps a minor point, but it does mean the documentation pages are inconsistent. Compare the tuple implementations in the documentation for [Hash](http://static.rust-lang.org/doc/master/std/hash/trait.Hash.html) and [PartialOrd](http://static.rust-lang.org/doc/master/core/cmp/trait.PartialOrd.html)

This changes the Hash implementation to be consistent with `core::tuple`.

That will help a bit, but it will still call it like

    impl Trait for (D,)
    impl Trait for (C, D)
    impl Trait for (B, C, D)
    impl Trait for (A, B, C, D)

I was mostly doing it so that the implementation for a 1-tuple would use "A", for a 2-tuple would use "A, B", for a 3-tuple would use "A, B, C", etc. Maybe this is too minor to worry about.