Add dummy kwargs to void backend constructors
Add dummy Sparsity, Solver and solve in void backend
Add it_space, is_direct and is_indirect properties to ParLoop
Add option to specify split set sizes

When running in parallel, we need to distinguish four different
classes of set elements:

 - CORE (owned and not touching halos)
 - OWNED (the local set size, all the owned elements)
 - EXECUTE HALO (in the halo, but executed over redundantly, to avoid
                 communication)
 - NON EXECUTE HALO (read when executing in the execute halo, but not
                     executed over)

Add the option to pass a list of integers to Set instantiation to give
these different sizes.  Baby steps towards parallel running.
Verify Dat size correctly when instantiating

Now that the Set may have halo elements, the data passed should be of
Set.total_size, not Set.size.
Sketch of halo exchanging
Add Halo object to base
Expose Halo object in public op2 API
Add slot for Halo in Set object
Add halo-exchanging code and reductions using mpi4py

Update sequential ParLoop computation appropriately with split
reductions as well as split halo exchanges.
Add type conversion to numpy arrays for Halo instantiation

Rather than requiring the user to pass numpy arrays for the Halo
sends and receives arguments, allow any numpy arraylike (tuple, list,
etc) so that user code does not look so messy.
Add reasons for assertion failure in Halo instantiation
Move halo verification to Set instantiation time

Rather than verifying the halo send/receive bounds every time we kick
off halo exchanges, just do so when we attach a Halo to a Set.