Also support objects that inherit mpz objects as inherit 0 as mpz objects.
Don't backtrace when local_backend is missing.
Support this::x for variables in this object.

This is equivalent to this_program::x, but shorter to write. And,
incidentally, more logical and more like other languages.
[precompiler] Generate the various *_num variables conditionally.

If default_cmod_storage is allowed to default to static, and the
variables are not used, do not generate them at all.

This rather significantly shrinks the init functions for large classes,
and saves 8 bytes of ram per function at least.
Optimizer: Fixed over-optimization of F_ASSIGN_SELF nodes.

F_ASSIGN_SELF nodes weren't marked as OPT_ASSIGNMENT, so they
could sometimes be removed by the optimizer.

Also fixes some related optimizer and type-checker issues.

Thanks to Chris Angelico <rosuav@gmail.com> for the report.

Fixes [LysLysKOM 20983743].
Do not count programs without storage as gmp.mpz objects.
this_program:: -> this::
Clean up debug code a bit.
Somewhat more unwieldy parts interface for single messages, but easier for e.g. certificate chains.
Only attempt to import PEM CERTIFICATE parts.
Reworked some of the debug code.
Removed the a-bit-too-generic PROG_BUFFER_ID.
Stricter types in buffer.cmod
Stricter types for Image.WebP.
[precompiler] Use the correct types for classes and objects

This includes programs in the cmod file and external programs.

This makes the typechecker less odd, as an example the IOBuffer class
functions that return an IOBuffer will not give warnings along the lines
of "object of type IOBuffer can not be returned from a function
returning object(IOBuffer=__Stdio()->IOBuffer)".

You can also use any object type as arguments and return types, although
you still have to use object(X.Y) in most places due to the parser.
Commited forgotten support function