Build zoomable and pannable SVG canvas

I think some of the things happening in draw should be happening on the *updating* selection as apposed to only on the *entering* selection, otherwise only new data will have its attributes set. Draw functions will usually look something like:

```javascript
function draw(selection) {
   // entering
   selection.enter().append('div')
     .attr('class', 'foo');

   // updating
   selection.selectAll('.foo')
     .attr('a', 1);

   // exiting
   selection.exit().remove();
}
```

There's some subtle but important things about how selection works that mike explains in this article, definitely worth reading: http://bost.ocks.org/mike/selection/