Path extraction code

This code takes paths expressed as arrays of indexes (string or number, for dict-like and list-like objects) and tuples (to express choices by name and a condition). Given this path and data, it extracts the value(s) expressed at that path within the data; it'll be the core mechanic of mapping rules, which will use these paths to express the source location in the data.