The Mixin classes were in io, and imported within the vrt module,
but the io module also imported the vrt module (within _io). This
worked when copy was being imported before io in __init__, but removing
that import from __init__ produced a circular import.
An offset and length representation of windows avoids unnecessary
additions and subtractions that can lead to loss of precision.
A consequence is that we can no longer assert equality between
instances of Window and range tuples because Window no longer
subclasses tuple.
Rasterio is now ready for floating point windows.