FIXED: Crash when the autocomplete menu of a Token Field is visible while one of the superviews is removed

Previously, _CPAutocompleteMenu was trying to relayout itself using its related textfield's window frame. This was
causing a crash if one of the CPTokenField's superview has been removed. This fix ensures to stop layouting if the related text field has no window anymore.
New: added methods to globally turn off window constraining when resizing the platform window.

Previously, whenever the platform window (virtual screen) resized, windows were moved or resized to keep them on screen. This could not be easily overridden by the user.

Two class methods have been added:

CPWindow +setConstrainWindowsToUsableScreen:
CPWindow +constrainWindowsToUsableScreen

If +setConstrainWindowsToUsableScreen:NO is called, then resizing the platform window will not move or resize user windows.
Fixed: resizing a window did not attempt to maintain a minimum margin on screen.

Previously, window moves were constrained such that a minimum margin of the window was visible on screen, but window resizes were not constrained, allowing the user to effectively move the window off screen.

Now resizes are constrained such that a minimum margin of the window is always visible on screen so that the window does not get "lost".
Docs
New: moved application constants to a separate file.
New: notify when the platform window resizes.

The platform window is the virtual screen for Cappuccino windows. Per Cocoa, when the screen (platform window) resizes, CPApplicationDidChangeScreenParametersNotification is sent and the CPApplication delegate method applicationDidChangeScreenParameters: is called.
Fixed: window width was not constrained when platform window was resized.

Previously window heights were constrained to the usable screen when the platform window (virtual screen) resized, but widths were not. The code was there to constrain the width, but it wasn't being used.

This commit ensures the width constraining code is executed.
Formatting, optimizations.
New: sort the keys in CPDictionary -description.

This makes it easier to find an item in a large dictionary.
Fixed: constraining window's to the screen did not respect a window's minSize.

Previously, when the platform window was resized, windows were moved/resized to stay within the virtual screen, but if the window had a minimum size, it was not respected.

This commit ensures that if a window has a minimum size, it will always be respected.
Fixed: when constraining a window resize, the horizontal margin was fixed (and too large).

Previously a fixed margin of 40px was maintained at the left/right of a window when resizing it, which was excessive.

Now the minimum size allowed during a resize is the same as the minimum margin allowed when moving a window, which is determined based on the type of window.
Fixed: CPApplicationDidChangeScreenParametersNotification was sent once for each window.

Should be sent only once per resize.
Fixed: CGContextAddArc would fail if the path was empty.

Previously, CGContextAddArc would not work with an empty path. In Cocoa, CGContextAddArc implicitly starts a path, so it does not require a non-empty path.

This commit allows CGContextAddArc to be used with an empty path.
Fixed: certain actions would edit a non-editable text field.
New: non-editable but selectable text fields can become the first responder.

Without this change, text fields with setEditable:NO but setSelectable:YES could not become the first responder, and so would not listen for copy: events.

This change allows selectable fields to become the first responder, taking advantage of the distinction between first responder and first key responder maintained internally in CPTextField - a merely selectable field does not become the first key responder.

Refs #1972.
Fixed: CPTextField copy: only worked for editable text fields.

A non-editable text field does not use an input field, and so does not track what is selected within it. We will use a workaround for now but in a CoreText based text field in the future we'd be likely to always have a correct selectedRange and be able to remove this hack.

Fixes #1972.
Test: extended copy and paste manual test.

This change adds selectable text fields and labels to the potential copy sources.

Refs #1972.
Fixed: certain editing actions allowed for disabled text fields.
New: selectable textfield Select All (Cmd-A, Ctrl-A) support.

Like in Cocoa, a non-editable but selectable text can now be clicked and all text can be selected with the Edit > Select All option or the associated keyboard equivalent. Just like in Cocoa this works on selectable text labels as well (text fields without a bezel).
New: triple click selectable text field to select all.

This matches Cocoa behaviour. Cocoa also supports double click to select the current word but we currently don't know what word is being clicked. In some browsers (e.g. Safari) this will work natively. Chrome on the other hand selects something random after double click on a non editable div.