Add a blocksparse multiplication implementation

This is a first step, it may still need more work.
Is there a way of making that dependent on whether the garbage collector is on?
For instance, if we can register some code to be executed at the same time as the "c_cleanup" code for variables.