watch_directory_tree: enable recursion through its argument

Enable the recursive behavior through its dedicated
parameter ('bool_t recursive') rather than through
the global 'recursive_flag'.
watch_directory_tree: search for dir/simlinks only when recursive

When we don't want recursion we want simply to add the first
path so we can avoid to enter in the BFS.
extracting is_dir(const char *path)
extracting append_dir(const char *, const char *)

The purpose of append_dir is to complete a path adding to it a new
directory.
Also we can use it to ensure that a path has a traling slash, i.e :

  appending "b" to "a", generate "a/b/"

The function ensures that the return path has only *one* trailing
slash, i.e:

  appending "b///" to "a/" generate "a/b/"

but it doesn't ensure that the return is a valid path, i.e:

  appending "c//" to "a///b" generate "a///b/c/"

This should be a rare case since we work with real paths.
extracting append_file(const char *, const char *)

The purpose of append_file is to append a filename
to a path.
The function ensures that the path doesn't have
the trailing slash but it doesn't ensures that
the it is a valid path.
Merge pull request #21 from 0xNaN/dev

Extracting is_dir(), append_file/dir(), and some fix in watch_directory_tree