Return correct colorized string length.

When strings are passed to Colors::colorized, the string is altered by
swapping tokens for colorized encoded strings. Unfortunately, the string
length functions in `Colors` base the string length on the colorized
version of the string, often getting it wrong.

This commit introduces a `decolorize` method to remove color tokens and
encoded colors from a string. This allows the string's length to be
calculated using the actual string without the added information.

Unfortunately, the `decolorize` method is a little slow, so a cache was
added to make sure that the color conversions only happen once, not
multiple times. Where possible, the cached `decolorized` version of the
string is used for getting the string length as opposed to running the
string through the `decolorize` function.