Add ReductionBlazeFunc and instances using it

Ready for merge.

```
In [15]: x = blaze.sum([[1,2,3], [4,5,6]], axis=-1)

In [16]: x.dshape
Out[16]: dshape("2 * int32")

In [17]: x = blaze.sum([[1,2,3], [4,5,6]], axis=0)

In [18]: x.dshape
Out[18]: dshape("3 * int32")

In [19]: x = blaze.sum([[1,2,3], [4,5,6]], axis=0, keepdims=True)

In [20]: x.dshape
Out[20]: dshape("1 * 3 * int32")
```