Add a blocksparse multiplication implementation

This is a first step, it may still need more work.
Does that mean that this memory is never freed until the end of the program, even if the garbage collector is on?
If so, it would be confusing for users, and potentially a problem.