Defines a middleware with callbacks during the RPC request life-cycle. The primary use case for
this is to collect timings for a larger metrics collection solution but the only constraints on
the associated type is that it be Send and Copy, giving users some freedom to do what
they need to do.