Rewrite of embedded arrays

This is a backward compatibility-breaking change which implements a new syntax for expressing embedded arrays in documents. 

The previous syntax of just putting a type in a single item list to specify an embedded array, was inadequate for a number of reasons.
 - Impossible to declare list of lists and retain schema type-checking
 - Impossible to make lists validatable, required and have a default value
 - Syntax is clunky, and cumbersome to deal with.

This commit changes the syntax from this:
```python
"things": [basestring]
```
to this:
```python
"things": {"type": Array(basestring), required: True}
```

In addition, support has been added for validating embedded lists and providing default values for them. Plus some additional validators designed for lists have also been added.