libcore|App|Config: Allow running without /modules, config script

More permissive behavior for simple apps.
Scripting|Tools: Added "doomsdayscript" tool for running a script

This is intended to be a very simple tool for running the specified
script for testing purposes.
libcore|Scripting: Core functionality for object-oriented classes

This commit implements the core plumbing of an object-oriented class
system for Doomsday Script.

Added Value::memberScope(): when the value is used with the member
operator (left value), returns the Record where the members should be
looked up from.

NameExpression now checks for the existence of the __isa__ member
that specifies all the superclasses of an instance. Identifiers can
be located from superclasses if they are not actual instance members.

Built-in types like DictionaryValue can return their built-in class
directly via memberScope(), so that any operations done on them
are looked up from the class.

Evaluator now keeps track of the scope in which evaluation occurs
in terms of a Value, so that the appropriate instance can be determined
when doing a member function call. It can then call memberScope()
as appropriate to determine the namespace of the members. It can
also then give out the scope when a result is popped, so that a
function call can take this value and give it to "self" or specify
it via Context::instanceScope() for native calls.

ScriptSystem defines built-in classes in the native "Script" module,
e.g., Script.Dictionary with keys() and values() member functions.

Refactored dictkeys() and dictvalues() to ask DictionaryValue to
compose the returned arrays. Applied pimpl in Evaluator and Context.
Cleanup
Scripting|libcore: Instantiating a class record

Any record can be instantiated using the call operator. This
automatically calls the __init__ method if one exists in the class
record.
Refactor|libcore: Apply pimpl in Process
Scripting|libcore: Added ScopeStatement

ScopeStatement is used for executing statements in a specific record,
for example for declaring a class record with member functions.
Cleanup|libcore: Renamed serialization protocol version enums

Each enum value now describes the change that took place, making
it easier to keep track of the evolution of the protocol.
Scripting|libcore: More legibility for printed records

All columns of the output are now left-aligned, making it easier to
follow the structure of nested records. Extra whitespace was removed
to allow more room for deep records.

Printed arrays and dictionaries apply appropriate newlines and indents
to the elements, if they contain multiple lines.
Scripting|libcore: Added the name scope keyword (->)

This is nothing like C's -> operator but instead a special keyword
that lets NameExpression know where to start looking for an identifier.
It allows accessing shadowed members from super records:

self.Base->__init__()
Cleanup
Scripting|libcore: Renamed the built-in "Script" module to "Core"

This module is intended to contain all built-in core functionality
of the language (data types, etc.).
Scripting|libcore: Parsing and executing a scope statement

ScopeStatement executes a compound in a specific namespace. This makes
it possible to define member functions and other members in a named
record.
Scripting|Refactor: Added Core.String, use it in existing modules

Also use the new Core.Dictionary methods.
Refactor|ResourceSystem|CompositeTexture: Cleaned up Composite texture initialization somewhat
Refactor|libdoomsday: Implement pimpl in Wad using DENG2_PRIVATE, cleanup
Refactor|libdoomsday: Implement pimpl in Zip using DENG2_PRIVATE, cleanup
Scripting|libcore: Added built-in "dir" function

This works similarly to Python's "dir": returns the identifiers of the
local namespace or specified record as an array.
libdoomsday|FS1|Wad: Cleanup
Fixed|Hexen|GameSession: Always update the internal.save when revisiting a map

Somewhere down the line the logic for updating the old "reborn" slot
was confused resulting in explicit logic to not update internal.save
when revisiting a previously visited map. This is of course wrong as
if the player dies and they then attempt to load their progress they
will instead be taken to the map which they last left (in the current
hub).

I also inlined the P_RemoveAllPlayerMobjs() logic into GameSession
as its unlikely we'll need to do this anywhere else.