[Linux] Make sure memory is free'd

Memory could leak if output/error reading failed
[Makefile] Define _UNICODE for windows

This macro is needed as host-lib.c has some string related functions
from C runtime.

See http://blogs.msdn.com/b/oldnewthing/archive/2004/02/12/71851.aspx
for differences between UNICODE/_UNICODE
Make /output in CALL take string! instead of word!

This makes it in line with R2. In R2, if the string! is not empty, it
seems to insert the output to the string, which I doesn't feel natural.
So in R3, the output is appended to the string.
Take binary! for I/O redirection in CALL

The difference between string! and binary! is that, with string!, the
interpreter will try to do the encoding conversion before/after passing
in/out of the command; with binary!, no such conversion is done in the
interpter, everything will be passed in/out as-is. So if the conversion
is not desirable/correct, use binary! (and do the conversion yourself).
Accept file! to CALL
[Linux] Search PATH for executable

This makes it in line with Windows
[Linux] Update *len after reading

Or the data from last reading could be lost
[Linux] Detect failure of exec in child process

This makes CALL throw an error if exec fails
[Linux] Fix OS_Form_Error not filling the error string

GNU specific strerror_r (as _GNU_SOURCE is defined) might not fill
the provided buffer at all. So copy it to the buffer.
Accept an error num in Make_OS_Error

Such that not can only the last error be reported.
Differentiate error and exit code

Such that the error can be correctly thrown
Add UTF-16LE/BE codec for strings
[Linux] Open /dev/null in RDONLY mode for input
[Linux] Report error before subprocess exits

Such that it can be reported to the user
[Linux] Check return value from dup2

Just to make it more robust
[Linux] Shutoff compiler warning
[Linux] Report the first error

To make it easier to trouble shoot
[Win32] Avoid secure APIs

It doesn't work with msvcrt.dll from Windows XP
Merge branch 'atronix' into call-atronix
Restore Saved_State/Halt_State when a longjmp happens

this fixes CC#2190, which is illustrated by:

attempt [; this sets Saved_State
	catch/quit [ ;this calls Try_Block_Halt and sets Halt_State
		print x ; this causes an error, and calls
			;"longjmp(*State_State)", which invalidates
			; Halt_State above.
	]
]
load %./ ;Just tries to fill up the C stack and messes up "Halt_State".
halt ; Jumps to the invalid "Halt_State", and crashes

or

catch/quit [ ;sets Halt_State
    attempt [ ;sets Saved_State
        quit ; jumps to Halt_State, and invalidates "Saved_State"
    ]
]
print x ; Causes a jump to the invalid "Saved_State"