Small refactoring
Add IntervalExp and fix parser

All of N-dimensional array operations are now translated to ArrayExp.
Translate IntervalExp in ArrayExp::arguments to opSlice!dim(lwr, upr)
Support multi-dimensional opIndexAssign

If it fails, fall back to opSliceAssign for backward compatibility.
Support multi-dimensional opIndex

If it fails, fall back to opSlice for backward compatibility.
Support multi-dimensional opIndexUnary

If it fails, fall back to opSliceUnary for backward compatibility.
Support multi-dimensional opIndexOpAssign

If it fails, fall back to opSliceOpAssign for backward compatibility.
Add test case for 6798