Generalize stats from f64 to the Float trait

I would like a review of my changes.
This is not ready for merging. Some tests fail because of some float rounding issues.
But I cannot find the reasons for the failures,  I see only changes related to the generalizing.

The output is the following:
---- stats::tests::test_exp10a stdout ----
        task 'stats::tests::test_exp10a' failed at '116.029565 is not approximately equal to 116.029563', /home/leifeld/workspace/src/rust/src/libextra/stats.rs:493

---- stats::tests::test_exp10b stdout ----
        task 'stats::tests::test_exp10b' failed at '93.797143 is not approximately equal to 93.797141', /home/leifeld/workspace/src/rust/src/libextra/stats.rs:493

---- stats::tests::test_exp10c stdout ----
        task 'stats::tests::test_exp10c' failed at '97.716818 is not approximately equal to 97.716816', /home/leifeld/workspace/src/rust/src/libextra/stats.rs:493

---- stats::tests::test_exp25 stdout ----
        task 'stats::tests::test_exp25' failed at '101.441053 is not approximately equal to 101.441051', /home/leifeld/workspace/src/rust/src/libextra/stats.rs:493

---- stats::tests::test_norm10medium stdout ----
        task 'stats::tests::test_norm10medium' failed at '195.7032 is not approximately equal to 195.703197', /home/leifeld/workspace/src/rust/src/libextra/stats.rs:492

---- stats::tests::test_norm10narrow stdout ----
        task 'stats::tests::test_norm10narrow' failed at '102.2994 is not approximately equal to 102.299398', /home/leifeld/workspace/src/rust/src/libextra/stats.rs:492

---- stats::tests::test_norm10wide stdout ----
        task 'stats::tests::test_norm10wide' failed at '611.5725 is not approximately equal to 611.572489', /home/leifeld/workspace/src/rust/src/libextra/stats.rs:492

---- stats::tests::test_unif25 stdout ----
        task 'stats::tests::test_unif25' failed at '102.134667 is not approximately equal to 102.134665', /home/leifeld/workspace/src/rust/src/libextra/stats.rs:493