Fix some bad type checking rules for cast<?#Foo>
Add the inheritance checker

This checks all inheritance related issues. So far, it checks:
* that all subclasses of an immutable class are also immutable
* that any methods overriding an immutable method are also immutable

In the future, it will also check abstract and sealed modifiers.
Add the 'abstract' modifier

Most of the checking for this is done in InheritanceChecker, although
the TypeChecker makes sure instances of abstract types cannot be
created.

If a class declares an abstract method which is already implemented in
one of its super-classes, then any sub-classes must re-implement it.
Fix some problems with metadata parsing, and QName
Add .pbc files to .gitignore (except plinth-lib)
Add Interfaces!

Support for interface inheritance and mixins will come soon.

This changes the native representation of objects:
* Every object now has an interface search list. Whenever an object is
  cast to an interface, the interface's VFT is looked up in it by name
  (unless we know where the interface VFT is in the object at compile
  time)
* Classes now have a separate VFT for builtin methods. This is required
  for the run-time VFT initialisation to work properly with the multiple
  inheritance system that interfaces require.
* Classes have another VFT for each interface they implement. This is
  stored in a predictable order, and only in the top superclass which
  implements the interface.

The order in which super-types are searched for methods had to be
changed because we now have multiple inheritance; it is now calculated
using C3 Linearisation.

The native representation of an interface is a simple tuple of the
interface's VFT and its object pointer. Interface callees are
represented by objects.