ZENGINE: Create zengine bare structure

Add zengine base engine to engines/zengine as well as
modify the necessary engine files (configure.engines, etc.)
in order for it to be recognized.
ZENGINE: Allow detection to go off inner directory

Game detection needs to be off an actual resource, but all the resources
are in subdirectories. This updates the code to search for the specific
subdirectory.
ZENGINE: normalized file endings
ZENGINE: Alter video handling to follow the new video audio track wrapper.

Commit 7a49802c01b0c39be4e86335689db8f3359fde68 created an audio track
hook that allows video decoding to use a differnt audio track encoding method

Also, re-normalize line endings
VIDEO: Add an over-ridable wrapper for the AVI audio track handler

This is based on a suggestion made by clone2727, so the original
idea belongs to him.
Engines can now override the common AVI audio track handler with a
custom one. This is needed for the Z-Engine AVI videos, since they
use a custom audio decoder that is only used in the two Z-Engine
games, and has its own fake AVI audio format (17). This clashes with
the MS IMA ADPCM format, and therefore shouldn't pollute the common
AVI video decoder code. The addition of this over-ridable method
allows the Z-Engine to add its own custom AVI decoder while avoiding
code duplication.

Signed-off-by: richiesams <adastley@gmail.com>
ZENGINE: Add support for ZFS archive files

ZfsArchive implements Common::Archive.
ZENGINE: Add xor encryption handling to ZfsArchive class
ZENGINE: Clean up includes
ZENGINE: Create skeleton engine and move code away from Engine::Run

The goal is to have Engine::Run as clean as possible. Aka mostly method
calls.
ZENGINE: Create utility function that writes File contents to another File

scr files are stored and encrypted in archive files. This is an easy
way to dump them for debugging purposes.
ZENGINE: Create Object class.
ZENGINE: Split puzzleControl into two files. Add ResultAction enum

After further investigation, puzzles and controls don't really share any
structs. So it makes more sense to keep them seperate.
ZENGINE: Add documentation to utility functions and add a glorified trim function
ZENGINE: Create base puzzle parsing.
ZENGINE: Fix code formatting to follow the convention
ZENGINE: Convert 'Object' implicit conversion operators to accessors

Implicit conversion, while simple can cause problems and doesn't
show exactly how to get the value.
ZENGINE: Force 'Object' constructors to be explicit.
ZENGINE: Move initialization code from run() and into its own method
ZENGINE: Modify utility and puzzle comments to make them more clear
ZENGINE: Convert union of pointers to union of values except for String.

Instead of storing everything on the heap, only store Strings on the heap.
For Strings, store a char array pointer instead of an actual String object
since String objects are fairly large.