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 
In retrospect, the current representation might be a bit superior from the perspective of perturbing, because if you perturb a value of `Just 0.4` and it ends up as `Nothing`, then information on what was inside the `Maybe` is thrown away. So if a user chose that chart because of some other feature (and actually prefers a donut ratio), then iteration on the subsequent chart will have to "start from scratch" in the sense that perturbing a `None` into a `Just` will yield a totally random value. I don't think it makes a huge difference but the current representation does seem like it would yield better refinement. Need to think on it a bit more.