making slicing nicer, esp. with `end`

Quick test case demonstration:

```matlab
function test(a)
 b = a(1:end,2:end-2);
 c = a(end);
 d = a(:,end);
 e = a(end,end);
```

```python
def test(a):
    b = a[0:a.shape[0], 1:a.shape[1] - 2]
    c = a[-1]
    d = a[:, -1]
    e = a[-1, -1]
    return
```

The `start:step:stop` syntax still doesn't work, but that seems like a separate issue.