Support nested properties

Support nested properties by passing a tuple containing 0: property to extract and 1: array of sub properties to extract from within it. It means that to extract all properties from `{foo: 1, bar: {baz: 1, boz: 1}}` you pass `['foo', ['bar', ['baz', 'boz']]]`.