ICS-58: Implement ChartGroup, remove clutter from global namespace and general decoupling

This is a pretty chunky pull.  The main functionality is the new insight.ChartGroup class, which is a container for charts and tables. It handles the events they fire, wiring them up to Crossfilter.

Chart init() has been refactored so you just call chart.draw() (I removed redraw()),which initializes the chart lazily if needed, which is the pattern we've been using more recently.

Charts can be drawn without a container, or the container.draw() can be called if there are multiple charts.

Logic for filter functions has been moved into Dimension, where it fit better.

I had to update all examples (and lots of tests), hence the large number of files changed.
This feels like a few too many expectations for one test.  So if the test fails you will need to dig into the exception message to find out exactly why it failed.  For tests with a lot of expectations, I suggest breaking the 'Given' and 'When' parts into a beforeEach in a describe block, then just have a load of very short tests containing each expectation.  This way we will be able to see exactly why a test fails.