better caching mechanims

caching was replicating full db; this is dumb. only do the
primary tables, not the secondary ones.

offer option of 'xcol' and 'xarg' to _pk; move map_pk out of the
assembly line; it is special

add tests to reflect that we're now really idempotent (for real
this time, it was a bad decision to raise error before)