Refactor code

It's almost a complete re-write. It's now much more OOP. There are
comments marking where files should be split.

It now also takes into account multiple screens.

However, it no longer actually performs the layout.
Refactor layout code

Still doesn't get called - will do that once elliot gets here.
Make removeClient check for special windows

This stops the script crashing by trying to remove a window that
doesn't exist.