Add ArrayTransfer as layer between ArrayHandle and ArrayManagerExecution
Create a specialized ArrayTransfer for implicit containers

There is currently a problem with creating iterators in Thurst
(specifically for CUDA).
Attempt at choosing correct thrust iterator.

The problem is that now that the ArrayTransfer class can specialize the
type of portal on the execution side, the execution portal is not always
the expected portal from the ArrayManagerExecution.  Now you have to
choose what iterator to use based on the portal we get.

This is a first attempt, but it is not right as I get an ambiguous
resolution of templated/overloaded functions.
Choose correct thrust iterator.

It uses a thrust::device_ptr if the iterator can be resolved to a
pointer or to a thrust::transform_filter that reads data from an
ArrayPortal otherwise.

The code compiles (for OpenMP) and the tests pass (although I have not
checked the speed or to make sure the scheduling happens as expected).
Even if this works, I'm not particularlly happy with the solution.  The
problem is that the non-pointer iterators are read only.  This means
that any writes to an indirect pointer (such as for the VTK adapter)
will fail.
Fix code for CUDA.

Did some restructuring of DeviceAdapterAlgorithmThrust to use templating
to define types rather than having to specify them.
Removed unneeded topology lookup struct.
Convert Wedge to new cell format.
Merge branch 'SharedShrinkArraySizeFix' into ArrayTransfer
Add test for writing to funky iterators with thrust.

The recent changes for ArrayTransfer necessitated that if the iterator
was not a raw pointer, then the thrust device adapters created its own
iterator to force thrust into scheduling on the device.  This test makes
sure that this work properly (at least for correctness) for writing.

And the test currently fails because this writing is not supported.
Make custom thrust iterator writable.

Rather than return a value from the functor used with the thrust
transform iterator, it returns a reference object that can be used to
set or get the value.  This allows you to use this iterator as an output
iterator.

(I'm a little surprised the compiler lets me do this.  I would have
expected the transform iterator to be declared as input-only, but I
guess it is not.)
Fix a referenced class field that went out of scope.

Why, why, why did I declare a class field as a reference?!?  You would
think I would have learned by now not to do that for just this reason.
Removing CellIndex variable and corresponding methods using it.
Adding SetPointIndices in all other cells except CellVoxel
Adding dummy topology parameter to the consutructor to keep API similar to Voxel
Bugfix: The cell type should be CellTriangle
Removing CellIndex from CellVoxel.
Correct cells point connections to be non const and have better api names.
Update the TopoCell exec arg to work with the new cells.

This will now allow the TopoCell arg to hold to the cell ref, so
we can return by reference and save memory and not construct temp
cells.
Update the testing code with the new cel api.
Redesign the cell to need the topology to set the point indices.

The reason is that it creates a constant api for unstructured and
uniform cell types, so we don't need to specialize in TopologyCell
or the testing framework.