The `Query` class acts as a container for all information necessary to perform a particular
database operation. Each `Query` object instance has a type, which is usually one of `'create'`,
`'read'`, `'update'` or `'delete'`.
Because of this, `Query` objects are the primary method of communication between `Model` classes
and backend data sources. This helps to keep APIs abstract and flexible, since a model is only
required to call a single method against its backend. Since the `Query` object simply acts as a
structured data container, each backend can choose how to operate on the data the `Query`
contains. See each class method for more details on what data this class supports.