Misc code cleanup.
Added an option to enable/disable thumbnail images in the world view.
Revised the thread-related classes.

BaseWorker now takes an InterruptibleThread argument in its constructor.

Access to mInterrupted goes through a mutex (except where MapRenderer is
accessing it).

A QWaitCondition is used to sleep the app thread while waiting for a busy
worker to finish, rather than looping and calling msleep(1).

The mWorkPending code used by various worker object classes was moved to
the BaseWorker class.
Made tileset reference-counting even faster.

The reference-counting code in TileLayer was moved to Layer so that ObjectGroup
could use it.  'Map' counts the number of layers using each tileset so getting
the list of used tilesets or checking if a tileset is used is very fast.
Fixed a reference-counting issue with MapManager.
Furniture in RoofCap/Frame/Door layers may be placed on the outer edge of a building.

Since furniture in these layers is intended to be on walls it makes sense
that furniture tiles in the E and S orientations be allowed on the outermost
edges of a building.
Door and window objects don't replace the wall unless they align with the wall.

Previously, any time a door or window was placed next to a wall, the wall
tile would be replaced to have a hole in it.  That only makes sense if the
door or window is "in" the wall.  When placing a bathroom stall door next
to a wall there shouldn't be a hole in the adjacent wall.
Replaced QRect::adjusted() with BuildingFloor::bounds(dw,dh).
Fixed some issues with usedTilesets().
Use SmoothTransformation for the MapsDock image thumbnail.
MapComposite code cleanup (and synching with TileZed).
Fixed MapComposite::mSortedLayerGroups getting duplicate layer groups.

This didn't actually hurt WorldEd until I changed MapComposite's contructor
to call addMap() which calls ensureMaxLevels() which might add layer groups
to mSortedLayerGroups.