make selector, timer and semaphore lazy-initialise the file descriptor so that the code that uses them in a with-statement is neater / more beginner-friendly