Simplified the CreateSessions crunch job.

This simplified version uses only two functions, so it is easier to
follow. The first extracts a key that is used to group events from each
event. The second is a standard reducer that takes a key and iterable of
events and emits a single session for all of the events. This lines up
more closely with the expectations that readers have when they are new
to crunch, and simplifies the pipeline to: extract key, group by key,
create a session for each group.

The two functions, GetSessionKey and MakeSession, are also static
classes rather than inline classes. This separates the pipeline logic
from what each individual function does so they can be explained
separately.

Finally, this moves the partition-from-uri logic into a method so it can
be ignored more easily.