Allow providing ranges as subscripts for array[start:end]

This is how an array slice is done in PostgreSQL.  It maps
fairly nicely to a ruby usage of [start..end] for slicing arrays.

Unfortunately, one limitation of this method is that if you
want the start or end of the to be of types that ruby does not
support using in a range, you are out of luck (have to use
raw SQL for that still).
Make sure an offset without a limit is handled correctly when eager loading

In most cases previously, it raised an error.  In some cases, such
as one_to_one when the database supports distinct_on, it could give
incorrect results due to the offset being ignored.