support pre-emptive teardown

This adds a pre-emptive teardown to fixtures-fs.

Previously fixtures-fs would wrap a testing function and
    setup a file system before the function executes and then
    tear it down after the function completes.

This PR adds a pre-emptive teardown. In some situations like
    when the wrapped testing function throws an exception, the
    teardown would never get called.

This means when you re-run the test, the previous teardown
    never ran and the setup would fail with an EEXIST uncaught
    exception.

The pre-emptive teardown, is the cleanest way to avoid this
    situation where we teardown anything left behind by previous
    testing runs.

cc @kriskowal @lxe @sh1mmer