Merge branch 'refactor-syntax_unicode' into refactor-syntax_unicode_kupdown

Merge with lastest upstream
Add Unicode support to key up/down events

The key up/down events kup(...) and kdown(...) now take StringRefs.

KeySym functionality has also been enhanced - it now allows the encoding of Unicode codepoints in addition to the traditional ASCII and special keys.

A greater emphasis has been placed on whether an object cares about key presses or simply text. The "field" object is obviously interested in text but buttons (in the guise of pushbuttons, menus, etc) are really concerned with a particular keystroke being used as an accelerator or mnemonic. Therefore, field objects make use of the p_string parameter of the kup/kdown message while buttons instead use KeySym.

Theoretically, this allows any Unicode codepoint to be used as an accelerator or mnemonic for menus and buttons, respectively.
Add CopyElementAs{Boolean,String,Number,{Unsigned,}Integer,Real,Array} to MCExecContext

These are equivalents to the similar functions in MCExecPoint
Merge branch 'refactor-syntax_unicode_button_menu' into refactor-syntax_unicode_kupdown

Conflicts:
	engine/src/osxdcmac.cpp
	engine/src/osxspec.cpp
	engine/src/stack2.cpp
Add basic implementation of MCStringGetCodepointAtIndex

Does not yet support UTF-16 with surrogate pairs!
Add MCKeySymToLower

Converts a KeySym value to its lower-case equivalent.
Merge branch 'refactor-syntax_unicode_button_menu' into refactor-syntax_unicode_kupdown
Merge branch 'refactor-syntax_unicode' into refactor-syntax_unicode_fetch
Add MCExecContext::CopyElementsAs{StringArray,Filepath,FilepathArray}

These methods copy an element as an array of strings, a path to a file or an array of paths to files, respectively.
Add CopyOptElementAs{String,Filepath}{,Array} to MCExecContext

These are identical to their non-optional bretheren except that they assign the destination to the empty string or array (as appropriate) if the named element is not present in the source array.
Add CopyOptElementAsBoolean method to MCExecContext

Copies a boolean element from an array or, if it doesn't exist, sets the desination to kMCFalse.
Add MCNAME: an equivalent of MCSTR for NameRefs

Does exactly what it says on the tin.
Update the deploy code to use StringRefs in most places.
Add missing MCExecContext::ConvertToArray implementation
Corrections to CopyElementAsStringArray and ConvertToArray

The former should split a string into an array, not assume an array of strings in the first place. The second lacked a required typecast.
Merge branch 'refactor-syntax_unicode_button_menu' into refactor-syntax_unicode_kupdown
Change MCField::setupentry to use StringRefs
Merge branch 'refactor-syntax_unicode_findstack' into refactor-syntax_unicode_findname

Conflicts:
	engine/src/dispatch.cpp
Change the various {find,get*}name methods to use NameRefs

In the process, MCObject::names now returns a ValueRef instead of a StringRef.
Plumb in the kMCPropertyTypeName property type

The property getter/setter part of the engine had no idea how to deal with properties of this type, causing strange failures in the IDE (e.g. the right-click menu for buttons not appearing).