Limit image layer requests to layer extent

This has two nice consequences that can be seen in the wms-image.js example:
 * no images are requested when you browse outside of the layer extent
 * when the layer extent is within the viewport extent, cached images are used since the intersecting extent is the same for multiple viewport extents
Only request tiles within the layer extent

Previously, the tile layer renderers would request enough tiles to fill the viewport (based on the frame extent).  For layers that only cover a limited extent, this leads to many excess tiles being requested.  The wms-tiled.js example demonstrates this.  The table below shows the number of WMS requests made per zoom level before and after this change (e.g. at zoom 1, 28 tiles are requested before this change and 1 tile is requested after).

    | z | before | after |
    |---|--------|-------|
    | 4 |   14   |   8   |
    | 3 |   16   |   4   |
    | 2 |   24   |   2   |
    | 1 |   28   |   1   |

The Canvas tile layer renderer previously relied on frame-filling tiles being requested.  Areas of the canvas were cleared as new tiles were requested.  With these changes, when fewer tiles are requested after zooming out, we need to clear the entire canvas.  This doesn't happen during animated transitions and only occurs when a zoom out has completed.  In the end, we do far less drawing because excess (blank) tiles are not being requested.

The DOM tile layer render gets the same treatment.  This change doesn't modify the WebGL tile layer renderer.  That will take more work.