Simpler and more thorough tile pruning

The render method always generates a map of all tiles that should be drawn
(called tilesToDrawByZ).  This includes tiles at alternate resolutions, tiles
still loading, and tiles previously rendered.  At the end of the render
sequence we can simply remove all previously rendered tiles that aren't in
tilesToDrawByZ.  This provides an alternate solution to the problem described
in #53 and more.
Abstract out key conditions for interactions, fixes #51, see also #54
Remove alt-z tiles when all tiles load at target z

The changes in a14a15159fb93e6ad75df3abd9ad6748c67d50e1 made it so tiles
at alternate resolutions were not pruned when target tiles finished loading.
Two lessons learned

Telling the compiler that object keys are numeric causes more harm
than good (see === comparison that could never be met though the
compiler didn't catch it).

Never use goog functions without reading the source first.  The
goog.array.sort method does nothing special sorting numeric strings
(so the zs array might be ['1', '10', '2'] here).
Fix sort problem identified by @tschaub in f8462460bf82f46484149d52822d62a6ab660cfc
Use goog.array.map for browser compatability, thanks @AugustusKling
disposeInternal implementation for ol.Map
disposeInternal implementation for ol.control.Control
goog.array.forEach does not accept null values
Have disposeInternal call parent
Add tests for ol.control.Control
Add tests for ol.Map.prototype.disposeInternal
Make linter happy
Merge pull request #58 from elemoine/dispose

The map should be disposable
Merge pull request #56 from twpayne/interaction-conditions

Abstract out key conditions for interactions, fixes #51, see also #54
Don't use goog.* functions in examples
Add optional argument to @exportSymbol
Export goog.require as goog.nullFunction
Use identical code in compiled and standalone examples
Revert "Two lessons learned"

This reverts commit f8462460bf82f46484149d52822d62a6ab660cfc.