Fixed dry run output
Added dry run to more functions
Changed the high level protocol calls to return a protocol which must then be submitted via submit_protocol()
Updated examples accordingly