remove unused ListLock class
add Once synchronization primitive

Interface is similar to pthread_once (C).
call init_routine before setting initialized to 1

Otherwise, if many threads call once at the same time, then there's a
risk that the second thread will exist before the first thread (which is
executing init_routine). Problem is, the second thread will think the
initialization has occured, but it hasn't yet, and that's not good.