Halfway through tidy-up of eventtools. Occurrence generator updates to come.
Better daterange prettyprinter (old one is deprecated).
Much better date range printing - less ambiguous working.
Added version no.
Deprecated date_range in favour of pprint_dateime_range
Class that represents datetime ranges in an occurrence-friendly format, so we can DRY out Occurrence and OccurrenceGenerator.
Begun major refactor of eventtools. Specifically:

* Mostly-through making times optional (for all day events, and events where times are unknown).

* Changed, better, logic for multiday events. NOTE: If you have a multiday event from Friday to Monday, it WON'T show up in a query for what's on on Saturday (otherwise you get people arriving for camp on Saturday, when the coach left the day before), Sunday or Monday. If you want an event that shows up on all 4 days, create 4 separate events, or 1 single-day event that repeats 4 times.

* The varied and unvaried start and end times logic is in smartdatetimerange.py, and is used by Occurrence and OccurrenceGenerator. Therefore, lots of the functions that access datetime ranges directly are deprecated (you'll see warnings).

* All the existing eventtools tests pass. Now writing some event-with-date-only ones.
Completed tests and functionality for optional-date functionality. Happily, nice things happen when an all-day event is repeated every hour.

Also renamed timerange to timespan.
Small fixes after integrating in goplay.
Better warning for date_range deprecation.
Fixed the bug from hell. We were biting off more than we could chew by injecting into modules - the call to get_models() in cls._meta._fill_related_objects_cache() in the event base somehow erases all globals in all models. Maybe a Python bug??!!??

Anyway, now, EventOccurrence and EventOccurrenceGenerator are created inside the Event class. Refer to them with Event.Occurrence and Event.OccurrenceGenerator. Fix imports accordingly.

The only detrimental side-effect I've seen is that shell_plus doesn't import the injected models, and warns of such.
Merge branch 'timespan-refactor' of git@github.com:glamkit/glamkit-eventtools into timespan-refactor
Added has_finished function.
End date is now required, so Events either have 2 dates, or 2 datetimes. blank=True in admin, and if omitted end_date = start_date.
Tests for how changing OccGens affects persisted Occs (with many date/datetime permutations).
Version number for timespan-refactor.
Added a couple of description tests.
Made datetimespan more forgiving of enddate = None.
Applied modelchange from occurrencegenerator to occurrence. DRYed out timespans.
removing whitespace; smarter admin; setting blanks=True, for when we need them for testing (even though normally you don't see them in admin)