Scale doesn't know about data, renderer does

Before, scales knew what their data was and would compute an extent from that whenever it updated, with updates flowing like `renderer <- scale <- data`. However, sometimes the extent is better known by the renderer, for example, a bar chart knows that it must include enough space for the last bar.

This branch rearranges things so that scales don't know about their data, they only have  a renderer to extent mapping. The new flow of control in `scale <-> renderer <- data`, where a data update causes the renderer to compute a new extent, send that new extent to the scale, which potentially changes its domain an signals back.
I don't think this will be an efficiency issue, since the actual extent computation will be cached and only computed once. But it does seem a bit heavy-handed to recompute all of them.

I could add a function
```
public updateProjector(attr: string) {
          var projector = this._projectors[attr];
          var extent = this.dataSource()._getExtent(projector.accessor);
          if (extent != null) {
            projector.scale.updateExtent(this._plottableID, attr, extent);
          }
}
```
that is called when we project on an attribute, so we don't loop through all projectors. And `updateProjectors()` would call this function in the body of its loop.