Declare context and view classes on DataQuery

Instances from abstract classes do not behave like non-abstract classes.
For example, accessing `instance.pk` will raise an exception because the
implicit primary key field is not bounded to abstract models.

This solutions simply provides the ability to specific which context and
view class to use on a concrete query class.

In addition, the temporary context and view instances use the inverse pk
of the query. The inverse is used to prevent colliding with saved context
and view instances. A pk is necessary for proper cache key formation.

Signed-off-by: Byron Ruth <b@devel.io>
Please add a small comment here that says to see more detailed comment above regarding mock pk usage.