Adds `Context.register()` method to replace decorators.

Adds `Proxy()` class to improve proxy performance and encapsulation.
Refer to `results`, not `result` in genexpr.
Merge branch 'master' into feature/register
Merge branch 'master' into feature/register
Merge branch 'master' into feature/register

Conflicts:
	distarray/dist/context.py
	distarray/dist/decorators.py
	distarray/dist/tests/test_decorators.py
Fix deletion in MPIContext.
Fix shutdown-related bug in MPIContext.
Try using stateless _shutdown function rather than method.
Merge branch 'master' into feature/register

Conflicts:
	distarray/dist/context.py
Make inner method more obviously private.
Merge branch 'master' into feature/register
Address @bgrant's comments.

Also raises an exception if we try to register a function with a
context that clashes with a protected function name.
Context.register() docstring tweaks; handle more error cases.
Merge pull request #520 from enthought/feature/register

Adds `Context.register()` method to replace decorators.