Clean up string->{float, int} implementation

I have been meaning to clean up `std::num::strconv` for a long time. This module is too generic and hard to understand, both for maintainers and users.

I have specialized the underlying string->{float, int} implementations into two separate underlying functions. This will allow it to be more easily optimized in the future, and untangles the logic to make it more easier to understand.

The function signatures were also simplified to take only a source string and a radix. `{f32, f64}::from_str_hex` was deprecated in favor of `FromStrRadix::from_str_radix`.

r? @aturon @alexcrichton