Spec tests for `razor events`

This adds tests for the `razor events` query.

For https://tickets.puppetlabs.com/browse/RAZOR-382
Better error on bad format for events

When a request like `/api/collections/events/foo` came in,
this request did not result in a proper error message.

For https://tickets.puppetlabs.com/browse/RAZOR-382
Limit results from `razor events`

The list of events in `razor events` can grow unwieldy very quickly. This
change instates a default of all rows returned with options to return
different rows using parameters /api/collections/events:
- `limit` determines the maximum number of rows to return,
which defaults to 20.
- `start` determines what row number to start with, which defaults to 0.

This includes both of these parameters in `/api` under
`collections => events => params`.

Fixes https://tickets.puppetlabs.com/browse/RAZOR-382
Limit events returned from `/api/collections/nodes/:name/log`

In addition to `/api/collections/events`, the view for the node's
log also needs to be filtered. This will allow the same parameters
('limit' and 'start') to be passed in order to filter the returned
collection.

The result from `/api/collections/nodes/:name` will have a key
for `params` which will indicate that `limit` and `start` are
both valid for the `log` collection.

Fixes https://tickets.puppetlabs.com/browse/RAZOR-368
Refactoring to generalize collection_view

Non-functional change making a helper method more
generic.

For https://tickets.puppetlabs.com/browse/RAZOR-382
Limit events returned from `/api/collections/hooks/:name/log`

Fixes https://tickets.puppetlabs.com/browse/RAZOR-368
Add explicit ordering to `/api/collections/nodes`

The previous query used implicit (non-reliable) ordering.
This will instead use 'name' so the result can be
deterministic.

For https://tickets.puppetlabs.com/browse/RAZOR-382
Limit nodes returned from `/api/collections/nodes`

Fixes https://tickets.puppetlabs.com/browse/RAZOR-368