io: improve recursive_directory_walk

* Add optional throttle Semaphore pointer to limit the number
  of spawned fn as well as directory walk fibers
* Use const references to the passed functions instead of values
* fsearch: Use max_running as fn and recursion throttle
50 jobs for throttle-recursive-dir-walk in 12 minutes and 53 seconds (queued for 3 seconds)