Do similar for block devices and named pipes

There doesn't seem to be an io::FileType entry for character special
devices or sockets, so these fall under the io::UnknownType entry. Which
also gets highlighted in yellow, for precisely that reason.
Show file colours for symlink targets

This requires the dir field to store a reference to the path that
created it, so that path can be used to join onto the filename so it can
be properly statted.