Build zoomable and pannable SVG canvas

@andreit 
What we are doing at the moment for `conversationComponent` looks something like: http://bl.ocks.org/justinvdm/5bb355ae131b67de5833.  When we are using `.data()`, its great.

Problem is, there might be cases where we are defining a single datum (so we'd use `.datum()`) and cases where we actually don't bind any data. The approach won't work for this case: http://bl.ocks.org/justinvdm/f3a7354ceb87a21c89d2. I got the feeling that these components should be *standalone*, so it shouldn't matter how their data was bound.

We could do one of two things:
   - Use the approach we are currently doing, but use a slightly different pattern for components that aren't bound using `.data()`.
   - Have the components handle only how they are *updated*, and leave the way they are *entered* and *exited* to the thing that is using them: http://bl.ocks.org/justinvdm/f08f4f6b1a7d26bdc704.
   
I could be wrong, but I think the second approach might be the one that mike had mind when he proposed this component pattern (since the examples shown use `.datum()`): http://bost.ocks.org/mike/chart/. This does mean we will need to distinguish between the first draw and every other draw using something like `selection.node().hasChildNodes()` if the component is ever doing a `.append()` though.

To be honest, I'm happy with either one of the two approaches, but I think we need to figure out which one to use before we start adding more components. What are your thoughts?