Merge branch '2.1' into 2.2
Start Set2.
Add function prototypes.
Adding dimensions() and maxDimensions()

Splitting the Set::countDim() into two methods.  This creates a simpler
API, as each method only does one job, and only has one argument.  Also
replacing recursion with iteration.
Moving flatten() across.

It is no longer recursive either.
Move merge() into Set2.
Move normalize() into Set2.

Dropping the ability to 'normalize' string data.
Move contains() across.

Fix a few issues in contains() with nested needle values.
Make contains() non-recursive.

Add a few more tests for contains().
Moving filter() into Set2.
Move numeric() into Set2.
Basic path selectors implemented for extract().
Adding tests for {n} and {s}
Implement presence and equality attributes.
Added some more operators.

Attribute + {n} is still not working.
Making attributes work with any selector type.

Attributes work with all base selectors.
Fix muliple attribute conditions.
Add attribute pattern matching.
WIP, adding sort() and remove()
Extracting duplicate loops.