Ensure that Event class is only movable
Cache Time objects with std::unordered_map
Change EventKind order

Make it easier to add new kinds of I/O.
Add encoding to detect CSP-style communication deadlocks

This partial order encoding is the result of joint work with
Ganesh Narayanaswamy who previously worked with Vojtěch Forejt
and Subodh Sharma on MPI deadlock detection. The four of us are
now collaborating on a future extension concerning the class of
message passing systems that can deadlock.

This commit is related to this work but more about CSP-style
communication (e.g. Go language). In particular, I'll give an
extension to the encoding that specifies how values propagate
through Channel<T> send/recv operations. This is important to
check safety violations (i.e. runtime assertions).