second pass

Originally I just noticed that the watcher did not work for multiple log rotations so I wanted to fix that.  Then I realized that the watcher might also leak memory if I didn't explicitly remove the file from being watched.  Then I decided I should encapsulate the file, handle, and watcher.  Then I tried to find other possible bugs.
Now I'm second guessing myself.  It turns our `Reopen()` and `Close()` could all receive a non-pointer version.  I think the non-pointer version would still be referencing the same `handle`, `watcher`, etc. and those things are being modified so would receiving a non-pointer version kind of be misleading in those cases?  Would writing to the handle in `Println()` be modifying the handle so also be misleading?