Add (failing) tests for extend windows code

[#74438722]
Refactor `get_prediction_queryset`

Replace with `parse_and_get_queryset` which comprises three underlying
functions:

- `parse_location`
- `parse_time_range`
- `get_queryset`

This allows gives other code access to the time range/location parsers,
so that they can call get_queryset directly.

Also now when the `start` parameter is omitted it's a 400 error rather
than just silently not returning any results. Had to update a test for
this.
Rename {first,last}_prediction

to {start,end}_prediction
Implement extended tide windows

When we receive a request for tide windows with a `start` and `end` we
want to return any windows which overlap either of those points - ie if
we say start of 12:00 and there's a window from 10:00 to 14:00 we should
return 10:00 as the start - not 12:00.

- extend the initial `Predictions` query by 24 hours in either direction
  from `start` and `end`
- any tide windows which fall within that period *and* are at least
  partially inside the `start` and `end` should be fully included.
- if a tide window extends past 24 hour extended period, assume that the water
  level is *always* above the query, and truncate it down to the `start`
  / `end` point.

https://www.pivotaltracker.com/story/show/74438722

[Delivers #74438722]
[Fixes #74440840]
Use iterator version of map and filter in Python 2