queryservice: lip service to positional args

First cut at supporting positional args. This allows
you to send queries like:
select * from t where id1 = ? and id2 = ?
The parser will treat this query as:
select * from t where id1 = :v1 and id2 = :v2
So, the bind variables will need to be like this:
{"id1": 1, "id2": 2}
Merge branch 'vtocc'