text: Title: Cryptic error if permission directive returns non-bool
  Body: If I have a permission directive (e.g. a class with `@gql.schema_directive(locations=[Location.FIELD_DEFINITION])`) for which `check_condition` returns a non-bool value (let's say `None`) things may break badly.
  
  I'm getting 500 errors with the following stack trace:
  
  <details>
  <summary>Stack trace</summary>
  
  ```
  Internal Server Error: /graphql/
  Traceback (most recent call last):
    File "/home/edomora97/.cache/pypoetry/virtualenvs/olimanager--mAs8BZ3-py3.10/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
      response = get_response(request)
    File "/home/edomora97/.cache/pypoetry/virtualenvs/olimanager--mAs8BZ3-py3.10/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
      response = wrapped_callback(request, *callback_args, **callback_kwargs)
    File "/home/edomora97/.cache/pypoetry/virtualenvs/olimanager--mAs8BZ3-py3.10/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view
      return self.dispatch(request, *args, **kwargs)
    File "/home/edomora97/.cache/pypoetry/virtualenvs/olimanager--mAs8BZ3-py3.10/lib/python3.10/site-packages/django/utils/decorators.py", line 46, in _wrapper
      return bound_method(*args, **kwargs)
    File "/home/edomora97/.cache/pypoetry/virtualenvs/olimanager--mAs8BZ3-py3.10/lib/python3.10/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
      return view_func(*args, **kwargs)
    File "/home/edomora97/.cache/pypoetry/virtualenvs/olimanager--mAs8BZ3-py3.10/lib/python3.10/site-packages/strawberry/django/views.py", line 194, in dispatch
      result = self.schema.execute_sync(
    File "/home/edomora97/.cache/pypoetry/virtualenvs/olimanager--mAs8BZ3-py3.10/lib/python3.10/site-packages/strawberry/schema/schema.py", line 241, in execute_sync
      result = execute_sync(
    File "/home/edomora97/.cache/pypoetry/virtualenvs/olimanager--mAs8BZ3-py3.10/lib/python3.10/site-packages/strawberry/schema/execute.py", line 206, in execute_sync
      ensure_future(result).cancel()
    File "/usr/lib/python3.10/asyncio/tasks.py", line 615, in ensure_future
      return _ensure_future(coro_or_future, loop=loop)
    File "/usr/lib/python3.10/asyncio/tasks.py", line 634, in _ensure_future
      loop = events._get_event_loop(stacklevel=4)
    File "/usr/lib/python3.10/asyncio/events.py", line 656, in get_event_loop
      raise RuntimeError('There is no current event loop in thread %r.'
  RuntimeError: There is no current event loop in thread 'Thread-1 (process_request_thread)'.
  
  ```
  
  </details>
  
  The API is not super clear about this:
  
  https://github.com/blb-ventures/strawberry-django-plus/blob/b416aa235aea2cc78facde305dbf0e11fc8c85cb/strawberry_django_plus/permissions.py#L389-L390
  
  Note how the return type is not documented.
  
  I think the culprit is:
  
  https://github.com/blb-ventures/strawberry-django-plus/blob/b416aa235aea2cc78facde305dbf0e11fc8c85cb/strawberry_django_plus/permissions.py#L297-L302
  
  Here if the value returned is not a boolean it assumes it is a future (which is not the case for `None` for example).
  
  ---
  
  I'm not saying this is a bug of this library, however the resulting error is very cryptic (and finding the root cause of the problem was quite hard as well). I'm proposing to _at least_ document this behavior, and maybe add an assertion or a proper check for the values returned by `check_condition`. Is `is_awaitable` really that slow?