When reading from the *inotify* file descriptor, multiple structs can be
returned. Because the read loop was incorrectly calculating offsets,
messages would frequently get lost in this way. This commit simplifies
the logic of the read loop, using only a single position indicator and
correctly calculating all offsets from that on each iteration. The
result is that no more messages are incorrectly skipped.
When multiple events arrive together, the `Inotify.read()` method parsed
them incorrectly and emitted the same `Event` for each one. This commit
corrects this behavior by appropriately parsing each struct.