Don't close session twice
interruptible_wait: evaluate Predicate immediately

Previous behaviour was to wait PredicateInterval before the first
time that the Predicate is evaluated
interruptible_wait: allow nil Predicate

Allow for the case where InterruptibleWait is used purely for the
timeout.
See the documentation string for details.
Make boot_wait interruptible
Make HIMN IP finding and ping interruptible