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 
It seems like `donut` and `donutRatio` should be one field here: `donutRatio :: Maybe ZeroToOne`. This should only change how you pass the options to `renderPieChart`.

Something like

```purescript
opts o = { labelThreshold: o.labelThreshold
         , labelType: o.labelType
         , showLabels: o.showLabels
         , donut: isJust o.donutRatio
         , donutRatio: o.donutRatio `getOrElse` 0
         }
```

Your death to booleans post is still in my mind :)