add query timeout feature

This commit addresses https://github.com/cqlengine/cqlengine/issues/245

I failed to provide a consistent API for all the Query types (DML, Abstract and Batch).

- BatchQuery accepts the timeout in the constructor.
- AbstractQuerySet has a timeout method
- DMLQuerySet is executed immediately so in order to add a timeout you have to either set it on the Model or use a context manager (which I prefer to avoid).

BatchQuery and AbstractQuerySet seem like the solution is ideal but it conflicts with DMLQuerySet.
I'm leaning towards adding a timeout() method to the BaseModel class in favor of the context manager.
I'd like to get some input on this.
For instances, it should modify in place. For querysets, it should return a copy.

IIRC, the reasoning was that querysets are supposed to be immutable, model instances are supposed to be mutable. Even though setting a value that only affects query behavior is awkward, it's less awkward than making the programmer remember which methods mutate, and which create copies. This limits situations where the programmer needs to worry about having 2 different representations of a row to those that are self inflicted.