Revised defaults for canvas size

I was having a problem guessing at good widths and heights for canvases that would properly include all the data, but not be too big (I wanted the canvas to fit the data so that it would be easier to center on the page), so I added a method that determines the size of the canvas based on the data and either the provided or default step sizes. 

In order to determine the max number of branches I needed a maximum finder function for nested lists; I used one from the [d3.js javascript library](https://github.com/mbostock/d3), which is open source. I only took the function I needed, and included the [license](https://github.com/mbostock/d3/blob/master/LICENSE) in the source, as required.

This __only__ changes the __default__ width and height, and still takes into account ones that are provided in options by the user. Therefore, if the user supplies no width and/or height, the canvas will fit the data in the dimension omitted by the user.