WindowOpener class

Added WindowOpener class, which makes sure that there cannot be two or more windows of the same type opened simultaneously. Until now, this situation could only occur with SettingWindow. Changing values in one SettingWindow would not have updated the other, so things could have theoretically got a little confusing.