Use an immutable graphics API

Currently, nodes manipulating graphics need to create defensive copies when changing objects. This is error-prone and not memory-efficient. By using an immutable graphics API, we only retain the changed objects, keeping references to the unchanging originals. This reduces memory overhead and is useful in multi-core scenarios.

The API uses the [fluent interface](http://en.wikipedia.org/wiki/Fluent_interface) with [method chaining](http://en.wikipedia.org/wiki/Method_chaining) for easy-to-read, immutable code:

    Path p1 = Path.EMPTY.rect(10, 20, 30, 40)
    Path p2 = p1.stroke(Color.WHITE).strokeWidth(5)
    p1.draw(g); // p1 doesn't change, and thus has no stroke

    Canvas c = Canvas.EMPTY
        .size(500, 500)
        .background(Color.BLACK);

We use Clojure's [persistent data structures](http://en.wikipedia.org/wiki/Persistent_data_structure) to provide efficient immutable collections.