text: Title: StaticRouteAsync leaves open files
  Body: When using static routes with a [`falcon.asgi.App`](https://falcon.readthedocs.io/en/stable/api/app.html#asgi-app), it seems that the `_AsyncFileReader` wrapper does not implement any `.close()` method, so files are left open.
  
  On CPython, I wasn't able to demonstrate any practical impact of this bug as the file object in question is refcounted to 0 and garbage collected as soon as it goes out of scope. However, that isn't the case when running `uvicorn` on PyPy 3.7, as PyPy uses a different GC implementation.
  
  Test case in point:
  ```
  import io
  import logging
  import os.path
  import unittest.mock
  
  import falcon.asgi
  
  logging.basicConfig(
      format='%(asctime)s [%(levelname)s] %(message)s', level=logging.INFO)
  
  
  class DebugIO(io.BytesIO):
  
      @classmethod
      def open(cls, *args, **kwargs):
          return cls(b'Test data!\n')
  
      def close(self):
          logging.info(f'{self}.close()')
          super().close()
  
  
  app = falcon.asgi.App()
  app.add_static_route('/files', '/tmp')
  
  debug = unittest.mock.patch('io.open', DebugIO.open)
  debug.start()
  ```