Made OrderedFloat and NotNaN generic for any type with the Float trait

I made OrderedFloat and NotNaN work for any time with the Float trait. Mostly so I could use them with f32's.

I haven't written much Rust yet so if this is dumb please tell me :)
I'm I especially feel like the tests could be made less repetitive somehow.
Nitpick, throughout, I prefer that this be styled like: `let f64_nan: f64 = Float::nan()`, i.e. no space before the `:`.