Update Protocol interface

Protocol instance could need access to the already known metadata. To
that effect, I updated the interface to receive the metadata along with
the URL to fetch.
Because it needs to be modifiable.