BulletMLX: Fix the incorrect ‘#EMPTY’ syntax in the DTD
Merge branch 'jeff/workspace'

* jeff/workspace: (66 commits)
  Decrease storyboard startingYOffset
  Refactor: Conflate textboxes with the base UIWidget class.
  Refactor: make textbox extend the new base widget class.
  Added base widget class
  Refactor: Move generic UI widgets to a "widgets" subdirectory in the UI directory.
  Some smal cleanup
  Added tiny portrait for Felis
  Show character portraits for each character in the storyboard character panel.
  Make character panel more compact.
  Make ClickzoneGroup fonts larger
  Make exploration scene information box font larger
  Add stubs for chapter 2 and 3 to the story
  Add a panel in the upper left of the storyboard scene that shows all characters
  Add some simple descriptions to each character
  Clickzone groups now track their child clickzone groups
  Track characters in Characters table for later iterating.
  Make exploration scene title font larger
  Made it so clickzone groups can be nested (more than one level).
  Refactor: Move storyboard scene into Storyboard subdirectory.
  Add completeness-based status colors to the storyboard.
  ...
LoveFrames: Fix call to deprecated love.filesystem.enumerate()

LÖVE 0.9.0 renames this function.
Debug: Replace call to removed function love.filesystem.mkdir()
Replace calls to removed function love.filesystem.enumerate()
Remove all uses of love.graphics.newStencil()

As of LÖVE 0.9.0 this function no longer exists.  We can now replace
our old pattern of

    local someStencilFunction = function () ... end
    local someStencil = love.graphics.newStencil(someStencilFunction)
    love.graphics.setStencil(someStencil)

with simply

    local someStencil = function () ... end
    love.graphics.setStencil(someStencil)

This patch rewrites all instances of newStencil() to follow the second
pattern above.
Fix case-sensitive require() for Linux
Fix call to removed function love.graphics.setIcon()
Fix call to removed function love.graphics.setMode()
Add the middleclass library as a submodule

We put this in our directory of libraries so that we can begin using
it to replace our current system of object-oriented programming.
Replace everywhere we load ‘src.oo’ with the middleclass library

This patch only changes the require()’s that we have.  It does not
perform any of the modifications necessary to make our code actually
use the middleclass library.
Delete ‘src/oo.lua’ since we are switching to middleclass
Replace all calls to newClass() with class()

This requires loading the middleclass library in some files where
previously we did not load our ‘src.oo’ module.  That is because we
always load middleclass locally, i.e. binding it to a table with
‘local’ scope in Lua, and thus loading any module which uses
middleclass will not load middleclass itself.  This helps avoid name
collisions but requires us to explicitly load the library in some
files where we previously relied on other require()-ed files to bring
in our object-oriented code.
Redefine constructors as initialize() methods

This replaces (most of) our current practice of using a create()
function for object instantiation.  The patch replaces those functions
with initialize() methods which the middleclass library uses.

We omit changes to the constructors of subclasses because we also need
to rewrite the over-arching definitions of those classes, and we will
update the constructors accordingly when we do so later.
Replace all calls to extendClass() with calls to class()

This may require explicitly loading the modules containing the parent
classes, but for now we assume that they are not necessary.
Fix calls to instantiate() for child classes

This patches changes them to use the initialize() function of the
parent class, as that is what the middleclass library requires.
Replace create() with new() for constructing objects

This patch performs a large search-and-replace and, as a result,
creates some collateral damage.
Fix a stack overflow when creating Scene objects

The constructor incorrectly calls itself, which leads to an infinite
loop and all the fun that comes along with it.
Fix uses of middleclass that cause blue screens on start-up

The biggest problem this code fixes is the omission of ‘self’ when
calling the parent constructor in sub-classes.  The patch also
corrects a couple of mis-uses of the old Vector2D.create() factory
constructor instead of Vector2D:new().

The patch also corrects the constructor for the Halcyon.

With this patch in place the game will at least start without causing
any blue screens.
Fix the constructors and static properties of purchasable items

This patch changes the code to make use of middleclass’s functionality
for static properties and calling parent constructors properly.