vfs: fix rename on non-empty directories

If you opened, let's say /dir1/file1, and renamed
/dir1 (a non-empty directory) to /dir2, it would
still be possible to find the file file1 at the
path /dir1/file1 as its entry in dentry hashtable
wasn't invalidated.

This patch fixes that problem by keeping a list of
child dentries in each dentry, and when a non-empty
directory is renamed, all of its active children
should be invalidated from the dentry hashtable.
Per-dentry lock was added to deal with concurrency.
Testcase was added into tst-rename.cc to assert that
the problem is indeed gone.

Signed-off-by: Raphael S. Carvalho <raphaelsc@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>