Use Fast Enumeration where possible

(Spun out of #483)

Language Feature  | Xcode  | OS X | iOS
------------- | ------------- | ------------- | ------------- 
for-in / `NSFastEnumeration` | :question:  | 10.5+ | 2.0+
`-enumerateObjectsUsingBlock:` | :question:  | 10.6+ | 4.0+

See the [ Objective-C 2.0 Programming Language: Fast Enumeration](https://web.archive.org/web/20081219211233/http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_8_section_2.html) (archive.org link) and [Programming with Objective-C: Blocks Can Simplify Enumeration](https://developer.apple.com/library/mac/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html#//apple_ref/doc/uid/TP40011210-CH8-SW5) pages for more detail.

Bonus commit 344b8b8, also replaces a while loop manually messaging an `NSArray`'s objects, with a single `-[NSArray makeObjectsPerformSelector:]`.
Just did some testing. Yes, mWindows array is being modified when close is called (the NSWindow is removed from the array), but it doesn't seem to cause any problems with `makeObjectsPerformSelector:`. Nonetheless, I don't know if this is kosher. Is it documented that this method will make a copy of the array before calling selectors on it, or that you can otherwise perform container modifying operations from within the selector?

Again, I would almost think it just be clearer to keep the old way and not have to think about this question (though I would change it to be closing the last window, rather than first every time. But that is a different topic).