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.