Add kernel splatter
This replaces !135 (merged) with a more complete implementation and some kernel classes.
The algorithm used generates a list of all the voxels affected by the splat, then sorts and reduces them to produce the final splat contribution which is then applied into the final volume, it can be inefficient when many voxels are affected as it uses a considerable amount of memory.
An atomic implementation is underway.