change the range data type

Store the right as an exclusive end. This matches our execution method, eliminating +/-1 operations.
wibble
wibble
add indexRemote and newRemote to LLVM.Array.Data

Update the Native and PTX execution steps to use these functions instead of their own specialised versions.
wibble
an associated class for asynchronous operations

This is basically just the operations required for the PTX backend to execute kernels concurrently, as this is the only point in the design space we have right now.

The instance for the Native backend is just a dummy.
add asynchronous copy to remote/peer
add common datatype for array environment during execution
add a common class to handle execution of array programs

Backends provide an instance that specifies how to evaluate each primitive, and the module handles traversal over the AST.
export wibble
warning police
rename Aval -> AvalR

This is consistent for our naming of types parameterised by the backend target. Note that we don't rename the specialisations.
fill out the rest of the Execute class
augment PTX kernels to take [start,end) indices

Instead of implicitly processing the entire array, inferring the array size from the input parameters or delayedExtent.
SMP: always compare worker IDs
LBS: don't split the remainder if it is less than the PPT
test if the gang has exhausted all work
debug wibble
generalise runParIO to take a Range
fork worker threads on specific capabilities