Fix bug in millisecond-to-string logic

Since I needed to create a new test file for the `ms` module, I rounded it off by testing the entire module. I can imagine that these tests might be too low-level, so if you'd prefer, I can try writing integration-style tests instead.

Commit message:

> When generating a string representation of a millisecond duration, use
> the rounded value to determine if the unit should be pluralized.
> 
> This commit also introduces unit tests for previously-untested string
> parsing logic belonging to the same module.