Build zoomable and pannable SVG canvas

Thanks for the suggestion. Its definitely an alternative which would allow all our components to be usable regardless of how data was bound.

I do think it makes more sense for a component to get a selection for its elements though, instead of a selection for its parent (the way we currently have it). Otherwise, we end up doing workarounds like the `.each()` in the example, or doing a `.datum()` to get the actual data we need for the component.

Maybe we should leave it as is. I think the kinds of components that will be used with `.datum()` and the components that will be used with `.data()` are different enough to warrant slightly different patterns.

Whether we should be including the way components are entered and exited in the component or at the place the component is being used is a different question I guess. Maybe lets see how things go, and if the latter ends up making more sense, it shouldn't be too much work to change.