Added cross() operation to group object

Added a new cross() method to the group object to make it easier to get 2-dimensional data out of crossfilter.  The current implementation scans the whole data set and doesn't use the incremental update capabilities, but it does use the group indices.

Basically, if group A has keys "a", "b", and "c" and group X has keys "x", "y", and "z", then calling A.cross(X) will give you an array with 9 values, one for each combination.  Should be faster than looping over one group, calling filter on the dimension for each group key (assuming identity group transform), and then reducing using the other group.

There is an option to honor or ignore the filters on the two crossed dimensions – filters on other dimensions will always be honored.

Also added a couple of tests but I won't pretend the coverage is 100%.