d3: Typed Scale interface to remove duplicate code

It is easier to understand what each interface that extends Scale actually does differently if the reader does not have to wade through redeclarations of domain, range, and copy.