I feel like having `MessageInterface` extending `HasHeadersInterface` limits the implementation, I believe the headers should be provided by another interface.

Let’s take for example the current Symfony\HttpFoundation structure. I rewritten  it a bit to make it clearer.

```php
<?php
class Request {
    function getHeaderBag(); // HeaderBag
}
class Response {
    function getHeaderBag(); // ResponseHeaderBag
}
class HeaderBag {
    function getHeaders(); 
    function getHeader($key); 
    function setHeader($key, $value); 
}
class ResponseHeaderBag extends HeaderBag {}
?>
```

With your proposal, this would have to be rewritten like this:
```php
<?php
class Request implements MessageInterface {
    function getHeaderBag(); // ResponseHeaderBag

    function getHeaders() { return $this->getHeaderBag()->getHeaders(); }
    function getHeader($key) { return $this->getHeaderBag()->getHeader($key); }
    function setHeader($key, $value) { return $this->getHeaderBag()->setHeader($key, $value); }
}
class Response implements MessageInterface {
    function getHeaderBag(); // ResponseHeaderBag

    function getHeaders() { return $this->getHeaderBag()->getHeaders(); }
    function getHeader($key) { return $this->getHeaderBag()->getHeader($key); }
    function setHeader($key, $value) { return $this->getHeaderBag()->setHeader($key, $value); }
}
class HeaderBag implements HasHeadersInterface {
    function getHeaders();
    function getHeader($key); 
    function setHeader($key, $value); 
}
class ResponseHeaderBag extends HeaderBag {}
?>
```

And with my proposal, if the `HasHeadersInterface` is the same as the `MessageInterface`, you simply do:
```php
<?php
class Response implements HasHeadersInterface, MessageInterface {
    function getHeaderBag() { return this; }
}
?>
```