pluggable autodomain via Domainer object

Now that #531 is merged in, we can actually do #455. This branch introduces the `Domainer` object.

```
var xScale = new Plottable.Scale.Linear()
             .setDomainer(new Plottable.Domainer().pad().nice());
```

This lets you turn on and off common settings for autodomaining, and gives us a place to put more of these options (include 0, etc.).

Also, you can set your own function if you want. Here's the default one:

```
new Plottable.Domainer((extents: any[][]) => [d3.min(extents, (e) => e[0]), d3.max(extents, (e) => e[1])])
```

This means that `scale.padDomain()` and `scale.nice()` are removed, you must go though a `Domainer` object.
for identical domain, if it's a date val, maybe we should pad by a different constant (eg ONE_DAY). since padding by 1 ms is a little tiny