Reintroduce first-class argument abstraction

This stops shoehorning arguments into unified protocol types that
aren’t even used to represent them on wire, and moves towards
the types that are used in describing commands in the documentation at
http://redis.io/commands, and metadata it is derived from at
https://raw.githubusercontent.com/antirez/redis-doc/master/commands.json

Sigil information was moved from RValue types in core to the
RValueSerializer in the protocol project.