compiler: Make maps and lists able to look up their params

As a neat syntactic sugar, it's very neat if maps and lists are able to work as if they were functions, and look up their arguments.

This implements just that, by translating `(map key)` to `(index map key)` internally, and `(list idx)` to `(index list idx)`.

I am not entirely convinced this is the best way to go around it, but this works as a starting point. If we could skip the translation to `(index blah blah)` and do it in one step less, that'd be better. But I haven't found a neat way to do that yet.

Review and hints are appreciated, I'll happily rework this based on your suggestions.