RegexState Copy/Move Constructors/Assignment Operators

Explicitly defaulted the copy/move constructors/assignment operators for the RegexState class.

GCC didn't mind that they were not explicitly defaulted, but Clang did.
Heap Overflow Fix

Fixed a bug in the RegexCompilerBase class template which was causing bad memory reads.

In the implementation of the IsNext method, the RegexCompilerBase object was checked for a one past the end condition after the current location was read, meaning that a possibly garbage iterator was dereferenced.
Merge branch 'regex' into regex_linux
Linux Makefiles

Updated the Linux makefiles so that they'd build the regular expression engine and associated tests.
Character Class Overrun Fix

Fixed a bug which was -- in certain situations -- causing an overrun when matching an inverted character set.

When none of an inverted character set's pattern elements match, and it has no subtraction, it matches the next code point.  However, before incrementing the RegexEngine to consume the matched code point, no check was done to ensure that the RegexEngine was not already at the end.  Therefore it was possible for inverted character sets to increment the RegexEngine past the end.

Since RegexEngine::operator bool only checks for l==e to determine whether the RegexEngine is at the end or not, this then caused other pattern elements to believe the RegexEngine was in a dereferenceable state.
Capturing Group Backtracking Fix

Fixed a bug which made it possible for a capturing group to attempt to release a capture that it had not actually made, resulting in undefined/bizarre behaviour.
Merge branch 'regex_linux' into regex

Merging the regular expression Linux branch to obtain fixes to
memory-related bugs discovered by Address Sanitizer.
Addition of Shared Makefiles and unicode.mk Simplification

Created the build/shared directory, to hold makefiles which will be shared between Linux and Windows.

Broke all the dependencies of unicode.dll/unicode.so out into build/shared/unicodeshared.mk, which is included by both the Linux and Windows makefiles, and which defines the variable UNICODE_DEPENDENCIES, which unicode.dll and unicode.so both depend on.  This means that both build/linux/unicode.mk and build/windows/unicode.mk will not have to be updated each time a new source file should be compiled into unicode.so/unicode.dll.

build.bat and build.sh have been updated to copy all contents of build/shared into the root directory before invoking Make.
Regex Tests Build Cleanup

Split the regex_tests.exe/regex_tests dependencies out into build/shared/testshared.mk.

The dependencies for tests.exe/tests could be broken out also, but the plan is to refactor these tests entirely, merging them with the regular expression engine tests, so they can stay as is for the time being.
Merge 'build_system' into regex

Merged the build system branch (which is dedicated to simplifying the
build system so that Linux and Windows makefiles do not have to be updated
separately) for unicode.mk and test.mk simplifications which will aid
regular expression engine development and testing.