Handle directories in tests folder. Fixes #138

Watchers use digest to efficiently check if a file has changed.
Digest does not handle missing files or directories well. So safe_digest
was written to wrap digest and catch errors.

In b1cb9e88df378506f05e36a56e652834909ac332 it was discovered that
the error catching was too optimistic and was eating errors that should
be reported to the user. To fix this, logic was added to catch
the known errors from digest and re-raise all other errors.

The only known error at that time was if the file did not exist.
Unfortunately digest also throws an error if it is passed a directory.
With the introduction of the new testthat tests folder structure,
all tests folders also include a subfolder called testthat. When
digest was passed the folder name it was failing.

Rather than filtering for folders, I've expanded the known errors logic.
The list of known errors is now encapsulated in a known_errors function.
An error is checked against this list, and if it isn't found then the
error is re-raised.

I also ran into problems with the tests in test-watcher. test-watcher
was explicitly testing internal functions, and I was having trouble
with the testing environment not finding these functions. I explicitly
export these functions if they are not in the current testing environment.
This is probably stupid and would love some pointers as to a better way
to test!
You can use `devtools::test(, "test-watcher"))` to run the tests in a single file. That's the easiest way to make sure the tests are run in the correct environment.