add pivot features

This addition allows to use crossfilter groups as chart series in dc.js. 

1 - use this fork of crossfilter (https://github.com/e-smile/crossfilter/tree/pivot), which allow to calculate reduce functions across projected groups at minimum cost: 
```js
data = [{
      value:14,countrycode:"US",state:"California",status:"plan",id:111,region:"South",date: "2013-05-25T16:10:09Z"
 },{
    value:15,countrycode:"US",state:"California",status:"actual",id:111,region:"South",date: "2013-05-25T16:10:09Z"
    },{
        value:45,countrycode:"US",state:"COL",status:"plan",id:122,region:"West",date:"2010-05-25T16:10:09Z"
    }];

data = crossfilter(data);
statusDimension = data.dimension(function(d) {
    return d.status;
    });
statusGroup = statusDimension.group();

dateDimension = data.dimension(function(d) {
    return d3.time.day(d.dd);
    });
dateGroup = dateDimension.group();
monthTypeGroup = dateDimension.group(function(d){return d3.time.month(d)});
monthTypeGroup.reduce( 
    // add
    // pivot[0].idx()[i] returns the index of statusGroup
    // the reduce function hence construct a key-value object, keys being indexes of the pivot group. 
    function(p, v, i, pivot) { 
         ++p[pivot[0].idx()[i]].count;
        p[pivot[0].idx()[i]].value += +v.value;
        return p;
    },
    //remove
    function(p, v,i,pivot) {
        --p[pivot[0].idx()[i]].count;
        p[pivot[0].idx()[i]].value -= +v.value;
        return p;
    },
    //init
    function(pivot) {
        var l, i, obj ={};
        if(l = pivot[0].all().length){
            for(i=0; i<l; ++i) {
                obj[i] = {count:0, value:0}
            }
        }
        return obj
    }
);
// project status to month group
monthTypeGroup.pivot(statusGroup)
```

2- Now we can use dc to display sum of plan/actual (series) versus month. Note series function that takes the pivoted group as first argument and a generic valueAccessor function:
```js
var lineChartDate = dc.lineChart("#line-chart-date");
lineChartDate.width(500)
        .height(150)
        .useYBaseline(true) // avoid stacking of groups
        .dimension(dateDimension)
        .group(mTypeGroup)
        .series(statusGroup, function(d, pivotGr, index) {
            return d.value[index].value
        })
        .y(d3.scale.linear().domain([0, 400]))
        .x(d3.time.scale().domain([new Date(2012, 4, 20), new Date(2012, 07, 15)]))
        .xUnits(d3.time.months)
        .xAxis().ticks(5);
```

Cheers,
C.

P.S. Nick, hope you are not reading this during your holidays ; )