Load scripts in their own environment

This patch changes LNVL.loadScript() so that it processes scripts in
their own environment.  We want to do this since scripts must have
variable assignments like

    START = LNVL.Scene:new{…}

and we do not want that to clobber any potential ‘START’ variable in a
game using the LNVL engine.  Global variables created in LNVL scripts
should not trample any variables outside of those scripts.  In this
patch we create a separate environment for each script so that we can
put those global assignments into a sandbox.
Use a global table for the LNVL script environment

This patch removes the local environment table from LNVL.loadScript()
and replaces it with the global LNVL.ScriptEnvironment table.  Some
benefits to this approach are:

1. All scripts we load will share the same environment and that will
make it easier for one script to rely on definitions in another.  For
example, we can define all characters for a story in one script and
have access to those characters everywhere else.

2. The LNVL engine has access to the environment for scripts and can
modify it dynamically.  This makes it possible for the LNVL modules to
augment the environment with additional data, functions, etc.

This change does cost us some amount of privacy since we now expose
the environment table, but that is worth the usefulness we get from
this approach moving forward.
Rename LNVL.currentScene to LNVL.CurrentScene

We use title-case for the values of the ‘LNVL’ table that we treat as
globals so we should do the same with the LNVL.CurrentScene value.
Report any errors in dialog scripts when using debugging mode

The LNVL.LoadScript() function ignores any errors in scripts.  That
may be ok for production releases, but when we are debugging games and
LNVL itself we want to see anything that may go wrong in scripts.
This patch changes the function so that it does not run scripts in
protected mode if we enable LNVL’s debugging mode.  If debugging mode
is not enabled then the engine will silently ignore errors in dialog
scripts like before.
Create aliases for the Scene, Character, and Menu constructors

When we create a Scene inside of a dialog script we write:

    FOO_SCENE = LNVL.Scene:new{…}

Not only is this verbose, it exposes the name of a class and its
constructor.  Showing this information runs contrary to our desire for
a domain-specific language for our dialog scripts.  We do not want to
think about implementation details in our story scripts, and we want
to avoid potentially breaking the validity of our scripts whenever we
change an implementation detail such as a constructor name.

This patch provides a utility function that lets us create aliases for
constructors, which we can then use in scripts.  For example, this
lets us write

    FOO_SCENE = Scene{…}

instead of the more verbose example above.  That makes scripts easier
to write and hides more of the implementation details.  The patch
provides aliases for three objects we commonly create in scripts:
Scenes, Characters, and Menus.
Rename LNVL.loadScript() to LNVL.LoadScript()

The title-case name is more consistent with other names like
LNVL.ScriptEnvironment and LNVL.CreateConstructorAlias().
Make LNVL.LoadScript() work with scripts that have no ‘START’ scene

The engine expects a scene with the name ‘START’ to exist because that
is the scene we always use first.  However, the first script we load
in a story may not define that scene.  So this patch teaches the
LNVL.LoadScript() to only assign ‘START’ to LNVL.CurrentScene if
‘START’ exists in the script environment, meaning a script defined the
scene somewhere.

The patch also adds an assertion to ensure that ‘START’ is actually an
LNVL.Scene object.
Use constructor aliases in all example scripts

This demonstrates the enhanced readability of the aliases and provides
test cases for them.
Use constructor aliases for all examples in the Howto document

We expect script authors to use the aliases and not the real
constructor names so we should use those aliases in the Howto.
Merge branch 'script-environments'

* script-environments:
  Use constructor aliases for all examples in the Howto document
  Use constructor aliases in all example scripts
  Make LNVL.LoadScript() work with scripts that have no ‘START’ scene
  Rename LNVL.loadScript() to LNVL.LoadScript()
  Create aliases for the Scene, Character, and Menu constructors
  Report any errors in dialog scripts when using debugging mode
  Rename LNVL.currentScene to LNVL.CurrentScene
  Use a global table for the LNVL script environment
  Load scripts in their own environment