add versions of loadData* that read directly from a Ptr

The data must be NULL terminated. The ByteString versions still exist unchanged, except this way we can avoid the additional copy in order to add the trailing NULL as required by the CUDA library.
improve implementation of loadDataFromPtrEx

Avoid some excessive copying when marshaling values to and from C. Instead of allocating temporary arrays, then copying these to ByteStrings, we can do a little better.

  * The error log is no longer returned as a ByteString. So, just marshal it directly to a Haskell String for the error message.

  * The info log is allocated as a foreign pointer and the C function writes directly into it. We still need on O(n) operation to gets its length so it can be trimmed when wrapping into a ByteString, but there is no additional copy.

  * Either operation is only done when required, on the success or failure branch.