Decouple integer formatting from std::num::strconv

This is working towards a complete rewrite and ultimate removal of the `std::num::strconv` module (see #6220), and the removal of the `ToStrRadix` trait in favour of using the `std::fmt` functionality directly. This should make for a cleaner API, encourage less allocation, and make the implementation far more comprehensible.

The `Formatter::{pad_integral, with_padding}` methods have also been refactored make things easier to understand.

The formatting tests for integers have been moved out of `run-pass/ifmt.rs` in order to provide more immediate feedback when building using `make check-stage2-std NO_REBUILD=1`.
Standardise benchmarks between std::num::strconv and std::num::fmt

This makes it easier to compare the performance of the different implementations. At the moment they seem comparable.

Initial benchmarks seems 30-50% faster.
Reduce reliance on `to_str_radix`

This is in preparation to remove the implementations of ToStrRadix in integers, and to remove the associated logic from `std::num::strconv`.

The parts that still need to be liberated are:

- `std::fmt::Formatter::runplural`
- `num::{bigint, complex, rational}`
Improvements to the of std::num::fmt API

Arbitrary radixes are now easier to use. For example:

~~~
assert_eq!(format!("{:04}", radix(3, 2)), ~"0011");
~~~
Move numeric formatting to std::fmt::num