[2.0] Refacto

It is the first step for the 2.0. The next one is to make it compatible with `psr/http-message`.