fix: NiftyCanvas fillRect() is using x, y, width, height now

It was x0, y0, x1, y1 before but to be more compatible with HTML5 canvas
this commit changes it back to x, y, width, height. Relevant examples
have been modified as well.
feat: Porter/Duff compositing, pre-multiplied alpha, Texture saveAsPng()

1) Porter/Duff compositing

This commit adds support for compositing operations to the NiftyCanvas
supporting all of the Porter/Duff specified compositing.

NiftyCanvas now has a setGlobalCompositeOperation() method which works
exactly as the globalCompositeOperation property of a HTML5 canvas.
Calling setGlobalCompositeOperation() will change the compositing mode
for all subsequent render operations for that canvas.

Internally it works like so:

1. All render commands will always be rendering to a working texture.
Initially the working texture is cleared (all black including alpha set
to 0 forming a complete transparent texture).

2. When setGlobalCompositeOperation() is called the current state of the
working texture will be applied to the canvas texture using the current
compositing mode. Initially the compositing mode is SourceOver. So at
the time of the first setGlobalCompositeOperation() call the current
working texture will be applied to the canvas texture using SourceOver.

Additionally the new compositing mode will be recorded as the new
current compositing mode.

3. When rendering is completed (or at the next call to
setGlobalCompositeOperation()) all render commands will again be applied
first to the working texture and then the working texture is applied to
the canvas using the now current composite operation (the 'source' part
of the Porter/Duff operation is the working texture and the
'destination' part is the current content of the canvas).

2) pre-multiplied alpha

Nifty now expects all texture data to be in pre-multiplied alpha format
which means that RGB is multiplied by the alpha value. This way the
Porter/Duff operations can be applied correctly.

If your texture data is not pre-multiplied then Nifty can now optionally
convert them when the texture data is being loaded.

3) NiftyTexture saveAsPng() method added

You can now easily save the current content of any texture by using the
new method NiftyTexture.saveAsPng() which will download the texture from
the GPU and will store them in the filesystem under then filename given
as a parameter.

Additional changes:

The NiftyRenderDevice interface now uses enums to specify the filtering
when creating/loading textures (enum FilterMode) and to pre-multiply
alpha (enum PreMultipliedAlphaMode). Using enums for that is more clear
then the booleans used before :)

BatchManager parameter has been removed from Command interface (for
internal NiftyCanvas rendering).