Removes fibrous as a dependency 

This will add some tests and remove the dependency on `fibrous` so it can be more broadly used.

The public interface does not change, so existing code that uses this should not need to be updated.