Use mmap and cast to read binary log

Instead of the more idiomatic original implementation using bufio and
encoding/binary, due to the poor performance of Go's binary I/O
implementation. Moving from that to mmapping the binary log and casting
it as a slice of eventData structs gives us a sixfold overall
performance boost (comparing both elapsed time and CPU cost) in testing
with a 45-MiB sample of event data - with an 80-fold improvement in the
run time and CPU cost of the log parsing itself.