gather units through case statement again (other implementations produced too much overhead)
refactor TimeUnit; add Microsecond
add Millisecond
add Second
add Day
test and fix leap days