Pass ignores as reference

We pass around the hash with ignored paths as a hash, which is
unnecessary. Instead pass around a reference to the hash.

Signed-off-by: Marcus Karlsson <mk@acc.umu.se>
Only create directories once

If the program is used with the --dry-run flag nothing is actually done
to the file system. If it is used in a situation where the program would
normally create a directory then that would not be been done.

If the --verbose flag is also used the program would print a line saying
that it created the directory for every link that would go into such
directory, because it just checks if the directory exists and tries to
create it when it doesn't. This does not reflect what the program would
actually do if the --dry-run flag is not present.

Save the path of all created directories, and don't try to create a
directory if a directory with the same path has already been created.
This makes the program only show the line once even when --dry-run is
used.

Signed-off-by: Marcus Karlsson <mk@acc.umu.se>