Avoid race conditions on task sup tests
Agent implementation
Add cast, async_get and async_get_and_update
Remove async_* functions
Fix race condition when starting task on foreign node

When starting a task on another node, the Task.Sup.async call would
raise if there was a netsplit. However when the task spawned it would
attempt to reconnect to the caller's node. If this was successful it
could wait forever for the monitor reference, if the caller caught the
raise from Task.Sup.async and was still alive and went on to exit
normally.