Improve HIMN IP-finding error handling

Previous code could dereference nil if there was no error, but an
empty IP was found
Separate config defaults from validation
Also close listener connection when port forwarding fails

Follow-up to 97df6fd283f7f3626e6ad80830dbeb0815428d08
that actually fixes the "Waiting for SSH" hang
Add keep_instance parameter

Determines when to keep the VM instance and when to clean it up
Can be one of "always", "never" (default), "on_success"