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.