Fire moveend only once after view settles

Currently, the `moveend` event is fired multiple times after the view "settles."  This can be seen by logging events in any of the examples:
```js
var ends = 0;
map.on('moveend', function() {
  ++ends;
  console.log('end', ends);
});
```

The Canvas and WebGL renderers behave differently with regard to the excessive events, but the event is consistently fired too often.  Instead, `moveend` should be fired under these conditions:

 * the user is not interacting with the map in a way that modifies the view
 * the view is not animating between states
 * the view changed (with regard to visible extent) since the last time the event was fired

Note that `moveend` **will** be fired even if there are tiles still loading.  Rendering new tiles does result in a changed view (from the user's perspective), but rendering tiles does not "move" the view (and `moveend` should not wait until all tiles are rendered).  If it is desirable to know when all tiles have finished loading and are rendered, that should be handled by a different event (without "move" in the name).

Fixes #1823.