Better shutdown handling for RPC.
Use multiprocessing Poll for kernel operations.

Catch exceptions in kernel thread and forward to client.
Use masked arrays to allow for filtering operations (e.g. x[x < 1]).

These can now work properly and efficiently without requiring extensive
expression optimization.

Unforunately numpy masked arrays are not too fast, so we should try
to avoid them when possible.  This will likely require marking
distributed arrays as sparse or masked and only activating that
codepath when necessary.