text: Title: Feature: add ExceptionMiddleware to handle processing exceptions
  Body: We should provide users with a suitable mechanism to handle and process application exceptions like [**FastAPI** does](https://fastapi.tiangolo.com/reference/fastapi/#fastapi.FastAPI.exception_handler)
  
  I think the best way to make such mechanism suitable and flexable in the same time - implement it via special built-in middleware like in the following example:
  
  Register handlers by constuctor:
  
  ```python
  from faststream import ExceptionMiddleware
  from faststream.nats import NatsBroker
  
  async def handle_value_exception(exc: ValueError): ...
  
  async def handle_type_exception(exc: TypeError): ...
  
  exception_handle_middleware = ExceptionMiddleware(
      {
          ValueError: handle_value_exception,
          TypeError: handle_type_exception,
      }
  )
  
  broker = NatsBroker(middlewares=(exception_handle_middleware,))
  ```
  
  And register handlers by decorator:
  
  ```python
  from faststream import ExceptionMiddleware
  from faststream.nats import NatsBroker
  
  exception_handle_middleware = ExceptionMiddleware()
  
  @exception_handle_middleware.add_handler(ValueError)
  async def handle_value_exception(exc: ValueError): ...
  
  @exception_handle_middleware.add_handler(TypeError)
  async def handle_type_exception(exc: TypeError): ...
  
  broker = NatsBroker(middlewares=(exception_handle_middleware,))
  ```