Factor out some common behaviour
Make the frontend entry points more similar to each other

The idea is to eventually replace them with one common version, and add a
blocking wait for the synchronous API.
Standardise on providing callbacks as k/v pairs
Require transports to provide base_uri
Add tag roles for sync and async transports
Tag the transports as sync/async
Move transport to frontend
Use retval mangler for bucket->resolve_alias
Consolidate frontend/bucket entry points
Consolidate mapreduce
Unify Bucket->search_index