This implementation is going to conflict slightly with the implementation I did for my JSON pull request.  It's essentially the same thing, but there's no longer a "to_string" implementation, instead the values write their data to a given iostream for the default output or return a JSON value.