Quite a lot of work on code layout for simd instructions in the amd64 codegen

I've been wondering how exactly the instruction name gets generated when running the
codegen, it uses the sizes, eg. for a double with size D and add instruction
of adds becomes addpd, which works. Unfortunately with simd types its not so simple
I ended up creating a seperate instruction for each single and double operation and
selecting based on the arguments of the primitives

For example, for the primitive Simd_Real_add there are 2 instructions in the
datatype sse_binap, sse_addps and sse_addpd, if the argument of Simd_Real_add is
VXXXR32 then addps is used if it is VXXXR64 then addpd is used. This also helps
tie in the additional ctypes I've added into the codegen.