Scenes: Record previously visited scenes

Before we can implement preconditions for scenes, i.e. requiring that
the player has visited scenes X and Y before being allowed access to
scene Z, we need a mechanism for tracking the scenes which the player
visits.  This patch implements the basic tools we can use for this
purpose.

We begin by introducing a ‘VisitedScenes’ table which maps the names of
scenes to booleans indicating whether the player has gone through them.
In order to populate this table we modify the ‘set-scene’ instruction,
the lowest-level point in the engine where we switch scenes, to update
data in that ‘VisitedScenes’ table.

The result is that changing between scenes builds us map that allows us
to quickly determine of the player/reader has seen a given scene or
not.  Technically speaking, it only tells us if the player has entered
that scene, and it is not in indications of how much content the player
witnessed within the scene.  Nonetheless it provides a strong
technological starting part for implementing such future features and
preconditions for being allowed to view scenes, because we can use these
changes to determine if the player has visited the prerequisite scenes
necessary to unlock access to any given scene.
Improve error output for the ‘set-scene’ instruction

The instruction may fail for two reasons:

1. There is no key in the LNVL.ScriptEnvironment table matching the
name of the scene, i.e. no variable in dialog scripts defining that
scene.

2. The key exists in LNVL.ScriptEnvironment but the value is not an
LNVL.Scene object.

This patch takes the current assert() that tests these two conditions
and splits it into two separate assert()’s.  This allows us to provide
more specific and informative error output for each failure.
Fix the indentation for the header comment in Scene code
Scenes: Remove the ‘name’ property

The original intent of Scene objects having a name property was to
help provide better debugging output.  However, we are moving more and
more in the direction of the variable names for Scene objects as
representing the name for that scene.  For example, if we have a
dialog script with the following

    Meeting = Scene {
        …
    }

then ‘Meeting’ is the name of that scene.  At a technical level
‘Meeting’ is the key in the LNVL.ScriptEnvironment table which points
to the LNVL.Scene object representing that scene.  This makes the
variable names the de facto “names” of scenes.  And so for that reason
we remove the long-standing ‘Scene.name’ property, an optional
property that we could define when creating a scene.  We only ever
used that property to help create debugging output.  But we can
achieve the same quality of diagnostic output without needed that
optional object property.
Merge branch 'record-visited-scenes'

* record-visited-scenes:
  Scenes: Remove the ‘name’ property
  Fix the indentation for the header comment in Scene code
  Improve error output for the ‘set-scene’ instruction
  Scenes: Record previously visited scenes