All the types - Use generics

Overhaul typing throughout the library by using generic types for scales and plots
E.g. `Abstract.Scale<D,R>`
`QuantitativeScale<D> extends Abstract.Scale<D,number>`
`LinearScale extends Abstract.QuantitativeScale<number>`

API breaking changes:
Removed `setupZoomCallback` from `DragInteraction` since it was annoying
    to type and no one uses it.
Now Typescript consumers need to provide more type information for scales et cetera.