alexfru Add rudimentary support for wchar_t
This also adds support for integer character constants
containing more than one character, e.g. 'ab'.

With this we should be able to use wide characters and wide
string literals, e.g. L'a' and L"abc".

This introduces wchar_t, WCHAR_MIN, WCHAR_MAX in the
appropriate existing headers (<stddef.h>, <stdlib.h>,
<stdint.h>), but does not add new related headers (<wchar.h>,
<wctype.h>) or any other wide char functionality.

The compiler (both smlrcc and smlrc) receives additional
options to control the type underlying wchar_t:

  UCS-2/UTF-16: -short-wchar -unsigned-wchar
  UCS-4/UTF-32: -long-wchar -signed-wchar
            (or -long-wchar -unsigned-wchar if desired)

UCS-4/UTF-32 is the default for ELF/Linux and Mach-O/MacOS
executables.
UCS-2/UTF-16 is the default for DOS, PE/Windows and flat
executables.

As usual, 32-bit wchar_t is only available in 32-bit mode(l)s
(that is, not in tiny, small or 16-bit flat mode(l)s).

Wide characters and wide string literals are limited to ASCII
chars inside the single and double quotation marks because
Smaller C parses source code as 8-bit chars and doesn't know
how to interpret non-ASCII chars with codes 0x80 through 0xFF
without properly supporting locales, code pages and the like.
Smaller C does not support UTF-8 with BOM either.
For non-ASCII characters use their Unicode codes like so:

  L"na\xEFve" // 0xEF = Latin small letter I with diaeresis
  L"fianc\xE9"L"e" // 0xE9 = Latin small letter E with acute

Note that in the last example we break the string literal
into parts in order to stop the hex sequence after two hex
digits, \xE9. Without that \xE9e would be interpreted as a
hex sequence for Lao letter Pho Tam.

Also note that string literal concatenation works only for
literals of the same type, e.g. "ab" followed by "cd" (or
L"ab" followed by L"cd"). Mixing and matching wide and non-
wide literals is not supported, e.g. the following won't
compile: "ab" L"cd" (or L"ab" "cd").
Latest commit ca30475 Aug 16, 2018