Argument sanity checks

Check for null & empty strings + check ttl is a real number.

I hear what you're saying about normalizing the strings, but subjectively I like to see all the conditions that will fail fast at one place at the top of the method rather than a `nullToEmpty` at the call site. Purely my opinion though :)

Do you want me to write some units or is that overkill?