Extract common test setup

I had a brief play with making DataSet have a pointer to Storage and
DataSetMetaData. I abandoned that idea since it seemed to read worse,
with lots of pointer dereferencing and having to copy into temp
variables when using range to avoid all spawned goroutines pointing to
the last value of the pointer.

eg

```
for _, metaData := range datasets {
	go checkFreshness(dataset.DataSet{DataSetStorage, metaData}, failing, wg)
}
```

became

```
for _, metaData := range datasets {
    copy := metaData
	go checkFreshness(dataset.DataSet{&DataSetStorage, &copy}, failing, wg)
}
```

I spent a bit of time debugging this. So going for the similar version,
which doesn’t contain such quirks.
Return more detail about staleness

The assumption is that we’ll want to return that in an “errors” array
in the response.
fixup! Extract common test setup
Implement JSON Schema validation

We are using github.com/xeipuuv/gojsonschema

Currently this implementation does the MAY aspect of the spec, and
doesn't validate formats.

See http://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-7.2

We validate it separately ourselves for _timestamp. If other schemas are
defined with "format": "date-time", we may want to add those to our own validation.

Or we MAY want to implement format support ourselves in the go
implementation.