Optimizer: Fixed bug in foreach with ranges.

The foreach range optimizer didn't handle negative start ranges,
which would cause foreach to index the array out of bounds.

Fixes [bug 7216].
Added _sprintf to Real.
Don't use debug_string anymore.
Added F_CALL_BUILTIN_N and F_APPLY_N.

This calls the constant in arg1 with arg2 arguments from the stack.

These opcodes are used if the number of arguments is known and bigger
than 1.

It is not really all that big an optimization, it only removes the
mark stack handling. And, in fact, due to the fact that it removes
some peep optimizations it might be somewhat slower when not using the
amd64 machine code (since, as an example, APPLY/ASSIGN_LOCAL/POP is no
longer an opcode that is used in this case).

However, when using the amd64 code the assign local + pop opcode is
higly optimized, so it's not an issue that it is not merged into the
apply opcode. It is in fact more of a feature.

For that reason the code in docode.c is currently conditional.
The only code generator using it is the amd64 one.
More certificate testing.
add_mem8_imm is used when not compiling with valgrind.

Re-introduced the function
Moved and trimmed code to generate CipherPair glob array to separate function.
Moved and trimmed code to generate CipherPair glob array to separate function.
OO harder. Let CertificatePair sort themselves according to perceived certificate strength.
Whitespace fix.
Refactored certificate lookup.
These didn't exists in 7.8, so no compat.