This is mostly a refactor and cleanup. It removes some confusion, and gives us greater flexibility.
wm_window.c has two functions that seem to be related siblings, WM_window_open() and WM_window_open_temp(). Most people would guess what these do and how they differ, but would be wrong. These aren't siblings. One doesn't create temporary windows while the other does the same for non-temp windows. WM_window_open() is used for nothing except for SCREEN_OT_area_dupli, does only part of the work of window creation, and can't really be used by anything else. It is there mostly so that it can create windows with absolute positioning.
This patch first removes the current WM_window_open() and has SCREEN_OT_area_dupli share the same window creation code as used everywhere else. Then the existing WM_window_open_temp() is renamed WM_window_open(), but gains arguments that allow it to create non-temp windows, and to position windows in a few different ways (as it is now, as required by dupli, and adds an extra option to allow centered in window).
This results in a net loss of lines and complexity. It also sets us up to allow centered dialogs later.
One thing extra it does is to make a less complex window with Window / New Window. The intent with the two options on the Window menu was for "New Main Window" to create a duplicate of the existing main window, with top bar and identical layout, that would be unowned and could act as a parent for other windows. But "New Window" is meant to bring up a simpler window that would remain a child of the main window. This patch makes it open with a single editor - the largest in your current layout. This way it is easier to change the one, or split it, etc to be as you wish. With existing code it takes too long to first remove all the separate editors:
