Fix custom coercion for support idempotent between `valid?`

Hi.

Please review?
thank you.

Closes #33 
@rail44 This isn't thread-safe because of `||=`. Can you please improve without caching the value? Thank you.