The primary motivation for this change is to eliminate the active list (see remaining reviews).
This obviates the need to scan the entire active list looking for vnodes
of interest and to maintain a dedicated active list in the first place.
Previous behavior of leaving VI_OWEINACT vnodes on the active list
without a hold count is eliminated. Instead, hold count is kept and
inactive processing gets explicitly deferred by adding the vnode to the
dirty list and setting the VI_DEFERRED_INACTIVE flag. The syncer is then
responsible for vdrop.
Finally all vnodes with write count get added to the dirty list, which
in particular includes ones with writable mappings.
Vnodes get dequeued from the list when their hold count reaches 0.
Newly added MNT_VNODE_FOREACH_DIRTY* macros support filtering so that
spurious locking is avoided in the common case.