create an fd provider struct and iterate over it

baby steps towards dynamically creating fd tables.
Eventually this static struct will be allocated, and the various
fd generators will register their open/get operations.