Reimplement ApproxEq that has been removed from the standard library

ApproxEq was removed from std::cmp, so If we still want approx_eq then this PR has it all implemented. Also, it make cgmath-rs compile at last, and all tests pass.
I don't like the fact that now most trait bounds like T: Float became T: Float + ApproxEq<T>, which is more text.
Please evaluate the change and let me know what you think.