Use ftw(3) to support recursing subdirectories.
Do not treat duplicates as errors since this would limit the recursive feature
too much. Instead, keep the warning but add the duplicates to the output file.
This change does not violate POSIX since the output produced by duplicates is
implementation defined[1]
Most modern editors (Vim, Emacs, etc) handle multiple tags without problems.
vi(1) in base handles the tags file by assuming tag names are unique. vi(1)
still handles the new tags file correctly since it only jumps to the first
occurrence of the tag. Since we keep the old behavior this does not violate
POLA.
Note that find_entries now accepts a const char * so we can pass the ftw(3)
filled argument path respecting correctness. find_entries is not supposed to
change file anyway.
[1] https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ctags.html