Build zoomable and pannable SVG canvas

I think we do this often enough that it would help to use [`expect().to.have.length()`](http://chaijs.com/api/bdd/#length-section)