Cleanup subscript

Hi, this is some older refactor work re-committed against the new master. It was my intention to make the subscript code more readable and a bit cleaner in the handling. I tried to make a distinction between the handling of Python objects, NumPy scalars and NumPy arrays. Mostly its just moving functionality around, but I've tried to take care of the edge-cases and quirks in the code by adding a comprehensive set of test cases.

One test case is disabled, however, because it fails with a segmentation fault. This is also the case for the current master.. something to fix later on. (Update: this has been fixed.)