Implemented mixed-mode ranges

Ranges can occur in two situations:
1. as part of an enumerator, e.g., x <- [2 .. 10]
2. stand-alone, i.e. [2 .. 10]

Both cases were implementedd separately, but this has now been replaced
by a single, unified, implementation.

Also mixed-mode ranges are now implemented, e.g, [1, 1.5 .. 2.0].

There are some minor deviations (improvements) from the way the
interpreter handles them. This concerns the type of the first element.
For the above example:

Interpreter gives [1.0, 1.5]
Compiler gives    [1,   1.5]

The compiler now respects the principle that the first element always
has the original type as given in the range description (int in this
example).
Merge branch 'master' of https://github.com/cwi-swat/rascal.git