circe-duration-string: Rewrite.

The old code was pretty buggy and could return the empty string in
a few corner cases. The new one should be correct.

Added some tests to make sure it does.