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
Style-wise, this doesn't feel like a proper guard statement since it's not checking for invalid arguments.

Maybe this instead?
```ruby
def perform_guard(obj, guard, *args)
  if guard.respond_to?(:call)
    guard.call(obj, *args)
  elsif guard.is_a?(Symbol) || guard.is_a?(String)
    obj.send(guard, *args)
  else
    true
  end
end
```