Numeric string->{float, int} implementation cleanups

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 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 `NumStrConv` trait has finally been removed - this trait was only used in `strconv`.

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`. I hope this is ok - these items are still experimental.

r? @aturon @alexcrichton 
That is, the old version will just read the string and only handle values between `b'0'` and `b'9'` (automatically ensuring unicode-validity), while this needs to validate as unicode, possibly allocating a whole new string, and then reparse as a number (i.e. revalidating that each byte lies between the two bounds).

One way to address part of the above is: invalid UTF-8 implies invalid number, so `str::from_utf8(data).and_then(from_str)` should work (avoids allocating, at least).