Adds support for multiple primary keys

The goal is to substitute `opts.id` (string) used internally by `opts.keys` (array of strings).