Adds fetchRange option to ERXFetchSpecification and fetchRange support to _MySQL.Plugin.MySQLExpression.

ERXFetchSpecificationBatchIterator in its current incarnation works fine for batching where a reference to the
batch iterator is maintained. However in direct actions, as used inside current ERXRestFetchSpecification.results(...)
method, a new ERXFetchSpecificationBatchIterator is created on each request resulting in the entire population
of primary keys being fetched and then the batch of EOEnterpriseObjects for the primary key range is fetched.

Having a fetchRange option in ERXFetchSpecification, with support in SQL PlugIns, enables the same range of objects
to be returned in one fetch in a stateless request. This is useful for stateless requests that request a range of
a huge population of objects. This feature may also not have the ERXFetchSpecificationBatchIterator
limitation of not supporting multi-column primary keys. Another advantage is that it has no limit to the total count of
the population of objects form which the range if fetched whereas ERXFetchSpecificationBatchIterator does have a practical
limit associated with ther total number of primary keys that can or should be fetched.

A disadvantage of direct SQL batch fetch is that for some complex qualifiers that return duplicate rows, the DISTINCT property
must be set to true to get accurate results. Having DISTINCT and ORDER BY in the same SQL statement apparently causes
problems in some database platforms such as Oracle that is taken into account by ERXFetchSpecificationBatchIterator
(see ERXSQLHelper.newSQLHelper(entity).shouldPerformDistinctInMemory(pkFetchSpec)) reference in primaryKeys() method
of ERXFetchSpecificationBatchIterator.
Merge pull request #213 from kierankelleher/feature/125/FetchSpecificationRange

Adds fetchRange option to ERXFetchSpecification and fetchRange support to _MySQL.Plugin.MySQLExpression. 

ERXFetchSpecificationBatchIterator in its current incarnation works fine for
batching where a reference to the batch iterator is maintained. However in
direct actions, as used inside current ERXRestFetchSpecification.results(...)
method, a new ERXFetchSpecificationBatchIterator is created on each request
resulting in the entire population of primary keys being fetched and then the
batch of EOEnterpriseObjects for the primary key range is fetched. Having a
fetchRange option in ERXFetchSpecification, with support in SQL PlugIns, enables
the same range of objects to be returned in one fetch in a stateless request.
This is useful for stateless requests that request a range of a huge population
of objects, for example in a REST API. 

This feature may also not display the ERXFetchSpecificationBatchIterator
limitation of not supporting multi-column primary keys. Another advantage is
that it has no limit to the total count of the population of objects from which
the range is fetched whereas ERXFetchSpecificationBatchIterator does have a
practical limit associated with ther total number of primary keys that can or
should be fetched. 

Keep in mind that ERXFetchSpecificationBatchIterator, if suitable, is probably
still a better choice for stateful requests.

If a SQL query returns duplicate rows then the distinct option may need to be
set on the fetchspec to accurately return the expected results. If the fetch is
against an abstract entity the results may be unpredictable.