Partial work towards #30

A mega-PR that includes a whole bunch of changes related to intelligent charting (#30):

1. Added analysis module for analyzing JSON, which uses heuristics currently to detect common types.
2. Added interface for charts, which enables generation, perturbation, serialization, and rendering of chart options.
3. Added implementation for `PieChartOptions` based on NVD3.

Once thoroughly tested / debugged, this is expected to become the pattern for other chart types (line, bar, etc.).

Review by @joneshf 
Unfortunately nvd3 is interactive, and adds things well beyond static HTML (JS event handlers, etc.).

I agree this would be the ideal. When we have more time we can consider using some of the purescript drawing libraries to do our own charts, in which case `render` can be pure and return an annotated representation of the chart.

Until then, I don't see any way to avoid calling the nvd3 rendering functions directly where we want the chart to exist.