Case creator staging

Checking in some changes to already-existing files that are needed for
the coming case creator, in order not to have those paved over by any
new changes that might occur in the future between now and the actual
checking in of the case creator itself.
Case creator staging #2

Checking in some more changes to already-existing files that are needed
for the case creator.

Also removing everything surrounding BeginCheckPartnerAction et al. from
the code base.  That was never used in case 1, as it was replaced by the
far superior and more versatile partner-present unlock condition.  Don't
really want people to be able to access this inferior way of doing
things when they start making cases.
Fixed text corruption and loading crash

- Added a semaphore to MLIFont to support off-thread access of
TTF-related functionality, such as getting the width of a string when
loading the case.

- Added an AutoSemaphore object to help with that; it automatically
waits on the semaphore in its constructor and posts to the semaphore in
its destructor, ensuring that the semaphore will be waited on and posted
to regardless of anything else.

- Also added a sanity check to Image to make sure that drawing only
happens on the UI thread.  That should already be the case, but if not
it'll crash anyhow, so this will give us more sane crash information.
Fixed build break

- Added a reference to SDL.h for SDL_ShowMessageBox in FileFunctions.h.
- Added an ifdef for GAME_EXECUTABLE around the check for the UI thread
in Image::Draw().
Fixed text corruption and loading crash (take 2)

- Moved all of the operations requiring access of MLIFont objects to the
UI thread, and added checks in MLIFont methods to ensure that they're
always called only on the UI thread.  Not sure why, but even with a
thread lock pattern, I still saw the crashes.

- Also switched the check for the UI thread in Image to use this new
method.

- Finally, added the CaseCreator directory to .gitignore so I can stop
having to uncheck all of those files every time I want to check
something in while I work on the case creator.
More case creator staging

- Accounting for a return type difference between vector<T>.size() and
QList<T>.size(), since GeometricPolygon uses both depending on whether
we're in case-creator mode or in game-executable mode.