spotify: refactor MercuryRequest code into sendProtobufRequest function

Previously, all functions which required MecuryRequest for communications
(such as `metadata()`, `playlist()` and `rootlist()) ) had to do the
construction of requests and callback processing themselves.

This commit refactors the logic into a separate `sendProtobufRequest()` function
which handles these sorts of communication.

This commit also updates the MercuryRequest protobuf format with new fields and
field names as found in the official client, and it turns out that the reply
of a MercuryRequest is actually MercuryRequest protobuf and not a MercuryReply
as was it being parsed as previously, so it is used instead for parsing replies.

Fixes #11
spotify: use SelectedListContent instead of ListDump for playlist and rootlist responseSchemas
spotify: make callback of sendProtobufRequest optional
spotify: use correct number argument for sending SUB/UNSUB MercuryRequests
Merge pull request #20 from adammw/protobuf-req

Refactor MercuryRequest code into sendProtobufRequest function