tabletserver: efficient update rewrites

tabletserver rewrites a DML this way:
From:
update table set val=:val where (where clause)
To:
select table where (where clause) for update
loop: update table set val=:val where pk1=:v0 and pk2=:v1
(one statement per row)

The new implementation rewrites it as a single statement:
update table set val=:val where (pk1, pk2) = (:v0,:v1)
or (pk1, pk2) = ...

Such rewrites allow us to identify rows that are changing.
Additionally, they make replicas do less work because the
statements do not incur the full cost of the original where
clause. However, it's offset by the number of statements
that are generated per original DML. This last problem will
be addressed by the new change.

I've also changed all internal bind variables to start with
'#' so they won't collide with any user-defined ones.
tabletserver: unify select rowcache codepaths

With the new where clause generation that works for both
single and composite primary keys, we can unify the code paths
for all the select plans.
rowcache: subqueries for composite pk tables

Rowcache is even betterer now! IN clauses and subqueries
can work for tables with composite pk also.
rowcache: pass_select for covering index queries

If a query has a covering index, skip rowcache.