Kahansum

Implements http://rosettacode.org/wiki/Kahan_summation
there's also a [FloatMax::max](http://doc.rust-lang.org/std/num/trait.FloatMath.html#tymethod.max) to get the biggest of two floats.\
If you wanted to go all functional, you could also write this as:

````rust
use std::num::FloatMath;
use std::f32;
fn find_max(lst: &[f32]) -> Option<f32> {
    if lst.is_empty() { return None }

    let max = lst.iter().fold(f32::NEG_INFINITY, |a, &b| FloatMath::max(a, b));
    Some(max)
}
````

or more conventionally

````rust
use std::num::FloatMath;
use std::f32;
fn find_max(lst: &[f32]) -> Option<f32> {
    if lst.is_empty() { return None }

    let mut max = f32::NEG_INFINITY;
    for m in lst.iter() {
        max = FloatMath::max(*m, max);
    }

    Some(max)
}
````

I think however that all these methods would fail if there was a NaN in the vec (which is a valid float value that has both NaN > x and NaN < x  false for any x and if I don't remember badly is the reason why floats don't form a total order in Rust)