Add a blocksparse multiplication implementation

This is a first step, it may still need more work.
Do we use different streams? Unless that is the case, according to the [CUDA programming guide](http://docs.nvidia.com/cuda/cuda-c-programming-guide/#default-stream):
> Kernel launches and host <-> device memory copies that do not specify any stream parameter, or equivalently that set the stream parameter to zero, are issued to the default stream. They are therefore executed in order.