EC framework

Introduces a derivative of assets represented as an entity-component
framework in an effort to replace the more convoluted assets subsystem.
The goal is to ensure that this framework is compatible with the
existing database and BSON implementations.
EC updates

Expanded tagging functionality, begin building out shader program
support.
EC updates, bugfixes

Fixes bugs with forgetting to call super() during initialization; adds
agnostic uniform handling to ShaderProgram components.
Designators

Adds "designator" components that hold no data and are not operable, but
can be used with the EngityManager.using() function to quickly obtain an
array of all entities which use that designator.  This powers the
built-in stepping routine for generic updateable components.
Begin migration

Begins the migration to an entity-component backend for game assets.
Downstream update

Adds code and bugfixes that should have been applied before the
migration branch.
Transform component update

Adds bounding regions, intersection tests, removes the Bounds component,
and corrects the stepping loop.
Audible components

Audible components are a conversion of the Sound object into a component
structure.  They can be gathered by the mixer and played in much the
same manner.
Conflict resolution
Audio migration

Prototypes for migration of audio playback to EC framework.
Improved "Executable" runtime

This commit improves the way an object implementing Arpk::Executable
handles its runtime.  This introduces the "terminated" status to the
mixin, as well as a single exception-catching loop that manages the
suspension state.  Before this loop begins, #init_runtime() is called to
ensure that any relevant variables which must be retained across
invocations of #runtime() are present and defined.

As a result, #runtime() is called on each iteration when the object is
neither suspended nor terminated.  Should an executable be terminated
(or encounter a fatal error), it will call #end_runtime() to perform any
necessary cleanup.
Use Arpk's UUID

Changes entities (and component IDs) to be generated by Arpk.uuid()
Improvements

Improvements to Mesh initialization and the handling of Transform
components on Audible entities.
Remove assets

Removes the assets library and converts most leftover features over to
components.
DB migration

Migrates the database framework to handle entity-component relations.
The *_asset methods will now operate on any object that includes
Arpk::Serializable or responds to #to_bson().
Make entities searchable

Adds the Searchable component that allows entities to store a number of
"friendly" names that can be searched for.
Merge remote-tracking branch 'origin/asset-removal' into ec-migration
EventQueue

Introduces the Arpk::EventQueue runtime, which is responsible for
holding a FIFO queue of pending events and dispatching them to either a
target entity (by ID) or to all entities which have registered a
Listener component that shares the event's mask.

Events are composed of 3 core values:
- Mask:  the "event mask" which determines its type and what Listeners
should process or respond to it.
- Target:  an optional entity ID which ensures that only the "event
target" receives the event.
- Arguments:  an array of parameters to be sent to the Listener's action
proc.

Events also retain an ID (for tracking) and a timestamp in milliseconds,
the later of which may be used to compute the delta between event
creation and reception by the Listener should an operation be
time-sensitive.
Better cleanup, corrections

Provides a termination hook for the EntityManager which cleans up all
loaded entities after the runtime terminates.  This hook is *not* called
if an error has unexpectedly terminated the runtime.

This commit also provides the correct code for the deserialization of
Listener components.
Minor utilities cleanup

Cleans up the utilities file.