Replaced throw/ScriptException with the ScriptError and proper returns

This way when there's an issue somewhere, rather than throwing an
exception and having to deal with it, we can pass a useful value back up
the call stack.
Added BreakWithNewScriptValTypes build flag

Yes, that's a long build flag. Deal with it.
With this flag enabled (I added it to the Debug build config), the
catch-all cases on most pattern matches get removed, and we get
incomplete pattern match warnings from the compiler. Reasoning here is
that while working on this code, a value not being matched in many
places is wrong, and we need to know about it. Used in a production
system, we don't want the code to crash out because of the unmatched
pattern, and so a default case is very useful.