[action/deploy/environment] Use visitor pattern

The Util::Attempt pattern previously used worked very well for
operations that could be pipelined, but failed horribly for operations
that needed to perform work before and after recursing into nested
objects. This commit replaces the Attempt pipeline by using visitor
methods implemented on objects to walk the entire deployment object
structure and update objects as needed.