fix head detection for adjacent heads of too different sizes and window placement based on apps file

* if you have e.g a 1920x1200 monitor and a small 800x600 monitor to the
  right of the bigger one and a small window at the right side of the
  big monitor (but still the whole window area at the big monitor) then
  the original head detection would claim the window is on the small
  monitor because (800/2+windowWidth/2 < 1920/2+windowWidth/2) is true
  for small windows; but that is obviously wrong, the window is entirely
  on the big monitor
* these incorrect head detections did lead to incorrect window
  placements as they were required in the apps file
fix initial window placement to allow proper head detection and window placement based on apps file

* a reasonable initial placement is important for later movements to
  different heads and correct head detection (required by apps file)
* it did not work well in case when (0,0) was not near any head
minor
Use shared code, minor code simplification
more compact code