Adding a cuda device adapter to vtkm.

Porting the dax device adapter over to vtkm. Unlike the dax version, doesn't
use the thrust::device_vector, but instead uses thrust::system calls so that
we can support multiple thrust based backends.

Also this has Texture Memory support for input array handles. Some more work
will need to be done to ArrayHandle so that everything works when using an
ArrayHandle inplace with texture memory bindings.
Use pinned memory for error reporting on the cuda backend.

This reduces the amount of explicit cuda Device to Host memory copies.
Add in initial support for texture binding of input arrays.