Update: Updated general Formatter interface and all subclasses. The format has been changed to utilize a "FormatData<T>" type that allows for arbitrary amounts of format data to be passed through