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.

Also Protocol may hold on resources which require to be shutdown. So a
new `cleanup` method is added to the Protocol. This is only reliable
in local mode though...