code: Add support for pmem non-temporal memcpy, memmove and memset

This pull request integrates the support for the PM versions of memset, memmove and memcpy using non-temporal instructions.
I thought about this a lot. In the case of memset() handling the unaligned address is easy to solve, simply look for the unaligned portion of the pmemdest and then copy the rest in aligned chunks(which I have done in my updated code based on your comment).  In the case of memmove() overlap matters. memset() doesn't allow for overlap. My algorithm handles all cases, overlap, non-overlap, unaligned, aligned. In most cases there will not be overlap so I handle this as normal. When there is overlap I do the move in the largest chunk possible(non-overlapping size chunk). In the worst case I do a byte by byte move. The critical thing here is that I never overwrite the src value before I have moved it to dest. In other implementations of memmove() they chose to do the worst case possible in all cases. 

I do need to consider the case where the dest address is unaligned so that I don't default to byte by byte in this case. I will think about how I might handle this more.