wrote a hopefully somewhat efficent software implementation of the simd real structure

Obviously the software implementation is going to be less efficent, but what I mean by
somewhat efficent is that if some uses the software simd backend that it will generate
code about as efficently as if the orignial code had been writen without using simd.

This is probably trickier that it sounds, because writing using simd operations incurs
penalties for loading and storing data, this is generally outweighed by the efficency of
simd operations, but if simd operations are not used the loading and storing must still occur
in some way or another.

I internally avoided using arrays as much as possible because, while they are necessary
for the actual simd operations, they are not needed for the software implementation. I imagine
there is a notable overhead for using mutable storage on the scales of simd vectors. I stuck
to using tuples and lists, if I'm wrong about the array overhead it should be easy to convert
to using arrays instead