Manage list of exports mounted on each export and pseudo unmount them

The PseudoFS is a tree of exports sub-mounted on the root PseudoFS or
other exports. In order to properly unmount an export from the PseudoFS
we must first unmount any exports sub-mounted on this export.

Signed-off-by: Frank S. Filz <ffilzlnx@mindspring.com>
Cleanup exports on shutdown

First, deconstruct the PseudoFS by umounting Pseudo Root.

Then unexport all exports.

Signed-off-by: Frank S. Filz <ffilzlnx@mindspring.com>
Release FSAL_PSEUDO export root handle on release export

This handle does not get cleaned up during unmounting of the exports that
are mounted on the particular Pseudo filesystem. Once export release is
called, there will finally be nothing that needs this node anymore.

Signed-off-by: Frank S. Filz <ffilzlnx@mindspring.com>
Remake cache_inode_destroyer into disposing of AVL tree instead of entries

Unexporting all exports as part of shutdown flushes the cache inode, so
instead, we will destroy the AVL tree. If the tree is NOT empty, we will
throw an error.

The function is moved into cache_inode_init.c and cache_inode_hash.c to
be adjacent to the initialization code for ease of verifying that destroy
undoes everything that init does.

Signed-off-by: Frank S. Filz <ffilzlnx@mindspring.com>