Modernize core::extfmt::ct

This is effectively a modernization of the parsing portion of format string handling (i.e., `core::extfmt::ct`).

It contains the following changes:
  * The structural record `Conv` is replaced with an otherwise identical `struct Conv`.
  * The structural records returned from the `parse_*` functions are replaced with instances of `struct Parsed<T> { val: T, next: uint }`.
  * All types have a derived `cmp::Eq` implementation to facilitate simpler test code.
  * The `parse_*` and `peek_num` functions are rewritten to remove unnecessary moves and copies and to use simplified logic.
  * `parse_fmt_string` is rewritten to use two byte indices instead of string concatenation to build up each string piece.
  * `parse_type` now correctly handles multibyte characters; although all current types are represented by single-byte characters, this prevents the function from failing through invalid indices passed to `substr` and allows any unknown type specifier character to be printed in its entirety.
  * Most functions now have associated unit tests.
  * The module is formatted more consistently.

Note that all function signatures remain the same _modulo_ the removal of the structural records, so these changes should not affect the code generation or runtime aspects of formatting.

Feedback is welcome.