Add Windows support, various improvements

smlrcc:
- support filenames and macro definitions with spaces (they will be
quoted with ""); this is hacky and messy, you should still avoid using
non-alphanumeric characters there as you're risking to get into trouble
with shell manipulations of program arguments
- support "-Dmacro[=definition]", "-Ipath", "-SIpath" and "-SLpath" in
addition to the old "-D macro[=definition]", "-I path", "-SI path" and
"-SL path", make it more gcc-like

smlrc:
- extend maximum identifier length to 63 chars

smlrl:
- bump up reserved heap size to 64MB in the PE/windows executable (not
sure if this field takes effect, though, haven't tested)
- support the -stack option in the huge memory mode(l)
- reduce the default stack size to 32KB in the huge memory mode(l)
- enforce minimum stack sizes (4KB in tiny/small and 8KB in huge
mode(l)s)

C library:
- properly parse the DOS/Windows command line to get expected
argc/argv[] values (support argument separation with tabs, quotation
with " and escaping with \), follow the logic of msvcr*.dll
- start counting ticks (those returned by clock()) since program start
- implement Windows version of the C library
- update libraries

executables:
- update all binaries
- reduce stack size in DOS executables
- add Windows executables

tests:
- fix crash in Windows version of hw0.c
- update compilation instruction comments