In practice, there were still too many concrete classes, which makes
integration into a framework hard. To overcome this, the codebase has
been refactored to use Interfaces when a resource is needed.
All necessary Interfaces have been created, and the existing concrete
classes now implement these interfaces.
Since now only a RequestInterface is needed instead of a Request object,
it becomes easier to use the Server component with a different Request
object, such as the Symfony or Zend Framework Request objects.
This will now only need a small wrapper, instead of extending and
rewriting the existing Request object.