Defer object_list pagination until serialization

As per #20, there were no hooks where it was feasible to analyze the
full result list, after searches but before pagination
Optimize the queryset-only code path

If all operations are database-backed, the queryset itself is annotated
with the metadata fields for the response JSON.

This is preferred because the queryset-only code path would otherwise
get expanded to a list-type object before we even slice for the active
page.  A search performed under these conditions would damage
performance by ignoring the paging factor in all circumstances, making
all individual pages take as long to load as it would to load the
unpaginated version.