Rewrite Ftree Iteration

Not psyched about a rewrite as we are closing in on 6.2... but the old
method was held together by string and wire.  This is much more robust
and easier since the filter is now more OO, and the actual filter object
can be directly used as an iterator (without having to worry about
whether you need an IteratorIterator, etc.).

The big key for me was understanding the difference between a
RecursiveFilterIterator and a FilterIterator.  The former is
required/responsible for determining whether an element's children
should be displayed.  The latter is required/responsible for determining
whether the current element should be displayed.  (At least in a tree
structure where the elements can be more than just a container).

The problem we had before is that we were trying to use a
RecursiveFilterIterator to determine both whether the current element should
be displayed and whether the children should be displayed ... that is not
possible.

This commit reintroduces the issue of an empty container in dynamic view
if all of its children are specialmailboxes, but I will deal with this
later (it is not critical enough to delay this commit).
Don't allow duplicate entries (i.e. non-IMAP containers) to appear in ftree