Add IterBytes impls for float/f32/f64. This allows creating
HashMaps with floats as keys.
auto merge of #7156 : Dretch/rust/float-hash, r=graydon

It can sometimes be useful to have maps/sets of floating point values.

Doing arithmetic with floats and then using them as keys is, of course, not a good idea.
Methodize TypeNames
Change calls for TypeName stuff to methods
Remove instruction counting.

This was somewhat under-used, and the information it produced wasn't
even particularly useful. It was also a major stumbling block in
trying to refactor CrateContext to avoid using @mut.

A replacement system can be implemented later.
Make log_fn_time a method
Start refacting LLVM Type handling
More Type refactorings
Add the rest of the atomic operations.

This makes the handling of atomic operations more generic, which
does impose a specific naming convention for the intrinsics, but
that seems ok with me, rather than having an individual case for
each name.

It also adds the intrinsics to the the intrinsics file.
Initial Type Refactoring done
Finish up Type refactoring
Fix warnings in trans
Remove the 'count-llvm-insns' debug opt