Add barchart for performance results

Barchart is created in an HTML file using d3js.org.
Throw NPE for null names in JsonObject#getValue()

* Add missing tests
* Introduce TestUtil with assertException helper method, in order to
  test the exception message as well.
Rename JsonValue.xxxValue() to asXxx()

* avoids the duplication of "value" in code like
    jsonObject.getValue( "foo" ).intValue()
* aligns these methods with JsonValue.asObject(), asArray(), asString()
* it's shorter

Example:
    jsonObject.getValue( "foo" ).asInt()
    jsonObject.getValue( "foo" ).asString()
Add JsonValue.asBoolean()
Add JsonValue.isFalse()
Prevent modification using iterator

In case of JsonObject, names and values lists must remain in sync.
Calling remove() on an iterator would lead to inconsistent state.

Let JsonObject.iterator() and JsonArray.iterator() work on unmodifiable
list wrappers.
Introduce unmodifiable objects and arrays

Objects and arrays returned by the parser should not be modifiable.
There might also be a need to pass JsonValues to a method without the
risk of having them modified.

Provide static methods to create unmodifiable wrappers, similar to the
Java Collections framework:

  JsonObject.unmodifiableObject( JsonObject )
  JsonArray.unmodifiableArray( JsonArray )