Make execute() and select() abstract, deprecate execute().
Refactor unit tests (again).

Centralize tests as much as possible to help with detecting differences between
the implementations, and for easier code maintenance.