Series event aggregation

Finally had some time to finish this. 

This will aggregate events in a serie based on time, place and organisers and stick that information in a `metadata` column on the serie. Most of the logic under `gh-series/lib/internal/cambridge/patterns` is based on the old timetable system, but I've added more documentation (there simply wasn't any in the old system). I'm happy to add more docs that explain how the whole pattern generation thing works in broad terms, but maybe it's clear enough as it is? I've been looking at the whole thing for so long, that is almost seared into my brain by now.

Some of the logic in the pattern stringification bit could probably be written a bit denser, but it's already pretty dense and I didn't want to tack on more obfuscating.