run DSL

Update the run DSL bringing back the ability to run multiple commands
with a single run call and include options for changing the current
working directory before running the commands (:in), running a prefix
command prior to each command (:with) and ensuring that commands are
only run once no matter how many hosts the command should run against
(:once).