Closes pulibrary/pul-store#76. Extent broken up.

@kevinreiss Should speak for itself. Lots of new tests and fancy validations. There's an equivalent PR over at pul-store-models. That should go first to keep Travis from failing.

:metal: