Relink static type objects after GC (#721).

When doing a garbage collection all not-counted references to other
type objects are nulled to prevent dangling references. Then when
counting the reachable references these links are restored, but
this was not done for static types. This patch fixes that.
Fixed some format specifiers.

They used %hd instead of PRIdPHINT, which was not
correct anymore on a LP64 platform.
Removed some unused variables.

They are not in use anymore after the change of
function headers.
Fixed argument to notify_lowmemory_condition().

It got an enum low_memory_conditions, not
enum memory_limit_types.
Removed compiler warning.

The code for processing unary plus for the precompiler
did have a self-assignment which the compiler mentioned.
Just removed it.
Removed count().

The function was not working properly due to the
unsigned argument and was not used anyway.
Removed a compiler warning in dump_core().

Instead of provoking a crash by referencing illegal
addresses, we just restore default signal handlers for
SIGABRT (and SIGSEGV) and call abort().
It should be sufficient on modern systems to get a
coredump (if the other conditions are met).
Removed some unused functions.

get_visibility_buf() was not used anymore.
Also ins_uint32() and ins_uint16 had no users so far.
Fixed a debug_message().

The time_stamp() was missing.
Fixed a refcounting error when parsing foreach statements.
Catch missing type information when determining the index result type.
Corrected the type deduction for the logical 'and' operation.
Reintroduce ins_uint32, ins_uint16 when not using FLOAT_FORMAT_2.

These two are only used when not using FLOAT_FORMAT_2.
Correct the function_headers pointer after swapping in a program.

When a program is swapped out, all pointers within the program block
are saved as relative offsets in the program. When it's swapped
back in then they are replaced by pointers to the new program block.
This was missing for the .function_headers entry, resulting in
a dangling pointer.
Don't treat missing type information as a struct-only type.

When type information was missing (i.e. type is NULL) then
is_struct_type() returned true, because it relied on
lpctype_contains() which is more permissive in such a case.
Now is_struct_type() catches that situation and returns false.
Catch situations where no type information is available.

clear_lpctype_ref() and get_lpctype_name() didn't account for a
NULL pointer being passed as a type. Also get_common_type()
should not return a NULL pointer as a success when a NULL
pointer was given. (NULL pointer denote missing type information,
which is perfectly acceptable.)
Extended versioning scheme and information.

If necessary, version tags may include a patchlevel in the
fourth position, e.g. 3.5.0.1. It is used if there is a
need to tag between real (stable) releases.
The patchlevel is exported to LPC in the define __VERSION_PATCH__
(which is actually not new, but was a constant 0 before).

The define __VERSION__ is a concatenation of with the version
(which includes the patchlevel if it is != 0), the so-called
local level which muds may add (in patchlevel.h[.in]) and
commit ID describing the git commit that was used to compile
the binary.
The version information in the log file does also contain the
version string, the local level and the commit ID.

The detailed version info includes additionally the name of
the last version tag in the git repository, the data it was
tagges and the person tagging it. Additionally the data and
time the binary was compiled.

If the driver is compiled from a git repository these
information is created automatically by version.sh and
mk-patchlevel.sh.
The information might be missing elements and be incorrect if
the driver was compiled from sources not in a git repository,
especially: release date, tagging person, commit ID.
Added a note about bison prerequisite.

We require bison (yacc won't work).
Check for bison in configure.

If configure finds no bison, abort with an error message.
We need bison, yacc is not sufficient.
Update the argument and return types on function redefinitions.

The argument types were not updated on redefinitions, because
differences were only detected on prototype/header parsing,
but the update was only done after having parsed the full
body.