at least, `tail -f` (not `tail -F` which is analogous to ReOpen) reopens truncated files. this change introduces the FileChanges struct to abstract the change notifications for file changes, deletions and truncations.