Update tile.js

Added the code required to implement virtual images and computed tiles.

The important parts are the call to "this.cacheTile" and the "rendered" handling.

The "rendered" handling makes it possible to modify a tile after it has been loaded.
The starting point is the method "fixTile" (drawer.js), this makes it possible to modify a tile.
For performance reasons it always generates a canvas context, no DOM image.
So the extra "rendered" if-statement is required to detect this.
There is no performance problem, because the image would have been converted to a canvas context anyway.

The "cacheTile" method is used by one or more invisible instances of OpenSeadragon to collect tiles.
These are then processed and accumulated to build the virtual image.
They are stored within the TILE_CACHE and the tileMatrix of the visible instance of OpenSeadragon.
This visible instance is the one which displays the virtual image.
Some changes were required in drawer.js (loadTile) to support this.

The following code is required to force appropriate painting and updating for the virtual image:

        //
        updateDrawer: function ( drawer, tile, target ) {
            try {
                var newtile = drawer.tilesMatrix[tile.level][tile.x][tile.y];
                newtile.image = target;
                newtile.loading = false;
                newtile.loaded = true;
                drawer.updateAgain = true;
                drawer.lastDrawn.push( newtile );
            } catch ( ex ) {
                console.log( ex );
            }
        },

And that method must be called for the viewer and the navigator:

                            mi.updateDrawer( osdMain.drawer, tile, target );
                            mi.updateDrawer( osdMain.navigator.drawer, tile, target );