vfs: Fix race in fdrop

There is a race window between f_count reaches 0 and we set f_count to
INT_MIN. This race would result in multiple call to fp->close() and
rcu_dispose(fp) if we call them in fdrop().

To fix, we set f_count to INT_MIN using CAS, this way, we make sure
fp->close() and rcu_dispose(fp) won't be called twice.

Fixes #293.

Signed-off-by: Asias He <asias@cloudius-systems.com>
Revert "Revert "epoll: fix up lock ordering issues""

This reverts commit 408a982f3f2fbd4a3aaddafb60233909eb6b7b83.