Does the `implements Iterable` need to be on the interface, rather than the class?
If pointing at the dynamic proxy then you wouldn't be able to do `for (MongoDBServer s: replicaSet)`.

I'm in two minds about it: downside is that it exposes more on the class/interface than required (rather than for example iterating over `replicaSet.getMembers()` where getMembers() is overridden to be strongly typed with generics).
Upside is that it's simple to use.

@sjcorbett What do you think of overriding getMembers() instead?