adding SetOnce<T> with tests.