Improved 'Selection' Code

Lots of improvements:
Firstly. Moved all of the selection code into 'Map'.
And setup to behave like a typical RTS:
Clicking on a unit will select just that unit. However holding shift
allows for selection 'stacking'.
Click and drag will select units within the rectangle. And deselect all
those not within it. However if shift is held it will 'stack'
selections.

Also added a bunch of comments to improve readability. (Algorithms are
quite complex)