actions: add new exists() test operator for symbolic links

Add new exists() operator that tests whether the file pointed
to by the symlink exists (in the source filesystem).

This can be used to exclude symlinks in the filesystem which are
dangling.

Note, this operator does not attempt to determine if the referenced
file is inside or outside of the filesystem being squashed.

Other additional test operators will be added to do that.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
actions: add new absolute() test operator for symbolic links

Add new absolute() test operator that tests if a symlink has an
absolute path, which by definition means the symbolic link may
be broken (even if the absolute path does point into the filesystem
being squashed, because the resultant filesystem can be
mounted/unsquashed anywhere, it is unlikely the absolute path will still
still point to the right place).  If you know that an absolute symlink will
point to the right place then you don't need to use this function, and/or
these symlinks can be excluded by use of other test operators.

This is the easiest and most basic test if a symlink becomes dangling
test operator.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
actions: add new contained() test operator for symbolic links

Test if a symlink appears to be within the source filesystem,
that is, it has a relative path, and the relative path does not
appear to backtrack outside the source filesystem using "..".

This test function does not evaluate the path for symlinks - this
is deliberate, as this makes the test fast, but in the presence
of symlinks in the path it can fail to identify paths which do go
outside the sourcefilesystem.  If this circumstance may occur, then
you should use contained_realpath(), which does follow symlinks,
but which is hence a much more expensive test.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>