Parse slightly more complicated range expressions

e.g.: a range that has negative indices

Involved some arbitrary parsing rule changes but this should be more flexible now.