Add JSON::Boolean to stout/json.hpp.

If you assign an JSON::Object a bool then it will get coerced into a
JSON::Number w/ value of 0.0 or 1.0.  This is because JSON::True and
JSON::False do not have constructors from bool.

The fix is to introduce a common super class, JSON::Boolean, which
both JSON::True and JSON::False inherit from.  JSON::Boolean has the
necessary constructor which takes a bool.

However, this leads to ambiguity when assigning a cstring to
a JSON::Value, since JSON::String already takes a const char * and
a const char * is implicitly convertable to a bool.

The solution for that is to rename the variant from JSON::Value
to JSON::inner::Variant and to create a new class JSON::Value
which inherits from JSON::inner::Variant.  The new JSON::Value
can have all the conversion constructors in a single place, so
is no ambiguity, and delegate everythign else to the Variant.

Also added a bunch of unit tests.

SEE: https://issues.apache.org/jira/browse/MESOS-939

Review: https://reviews.apache.org/r/17520