Allow passing non-Proc callables as guards

This extends the existing Guard execution logic to allow anything that responds to `#call` as a valid Guard, instead of only Procs