Iterator

Implementation of an iterator that goes thru a Component and all its sub-components in a tree (pre-order) traversal. A test case that demonstrates the usage is also included, along with wrapping to make these iterators accessible from scripting..
Good catch to make sure only components of type T can get through. However, this presents a new issue that I think reveals a (small) design flaw. Since there is always a filter, and by default it is filter-by-type, this now does *two* dynamic_cast operations in the typical iterate-by-type case. And you can't get rid of it because there is no way to ensure that a user's filter only permits objects of type T to get through. Unfortunately, dynamic_cast is an expensive operation so I don't think we should stick with a design that forces us to do it twice.

There is an easy fix, I think. Leave the new code here so that we're not depending on the filter to pick out the items of the right type. But remove all the "filter-by-type" default code, and instead have the default be either no filter or a filter that defines `bool isMatch(const Component&) const override {return true;}` or something like that.