Pass SSH context to remote tasks

Prior to this commit, remote tasks in the `deploy` name space would
set up their own SSH connections, execute, and clean up.  This made it
annoying to pipeline multiple commands in one connection; instead it
would connect, disconnect, reconnection, redisconnect.  This commit
makes it so that all the commands work on an already-open connection;
the caller can decide when/how to manage connections and
disconnections _end-to-end_ and only disconnect when they're truly
done.