Using explicit types for Input/OutputCache/OutputBuffer.

This fixes erratic behaviour where the InputCache of the ProcessBuffer
was a different instance than the one injected in other places.
Several providers became obsolete after tagging the
InputCache/OutputCache classes singleton.