Trying to make polyglot.Util.TypeEncoder more extensible to support
Fabric implementation.
Refactored copying during mutation into own methods.
Fixed copyIfNeeded to do correct things.
Used copyIfNeeded where appropriate.
ExtFactory now implements Iterable by iterating over the chain of
extension factories. Updated client code to use Java5 iterator syntax
where appropriate.
Fixed bugs identified by Jacks: Round 1.  Added relevant test cases.

- null + null should be illegal.
- int i = 1L; should be illegal.
- Duplicate superinterface should be illegal.
- Interface constant flags must be public static final and nothing else.
- super() constructor call to local class declared in static context
does not have a qualifier.
- Duplicate labels should be illegal.
- LocalClassDecl should be Stmt, not CompoundStmt, to obtain correct
reachability error.
- Case value should be assignable to switch type.
- synchronize (null) {} is illegal.
- Local class is an inner class, regardless whether it is declared
within a static context.
- Method cannot be both native and strictfp.
- Field cannot be both final and volatile.
- Class cannot be both abstract and final.
Fixed bug when compiling an empty file (should pass) and when
encountering unclosed comments (should fail).

StdErrorQueue now able to handle out-of-range positions gracefully.
Iterable ExtFactory now works properly with extensions.
Accounting for new constant pool tags in Java 7 class file format.
Reimplemented access control to almost follow JLS.  A few cases left.
Fixed more bugs related to boolean data flow.  Added relevant test
cases.

Patched recent bug fixes to JL5.
Fixed more bugs identified by Jacks: Round 2.

- Type checking local class whose name clashes with local variable.
- Detecting name clash on imports.
- Checking definite assignment of final fields inside constructor body.

Added relevant test cases.
Fixed more bugs related to access control.  Added relevant test cases.
Fixed more bugs identified by Jacks: Round 3.  Added relevant test
cases.

- Checked incompatible return types of inherited abstract methods.
- Checked correctness of casting conversion between interface types.
- Protected methods (e.g., clone()) are not inherited by interfaces.
Fixed more bugs related to access control and incompatible return types.
Added relevant test cases.

Changed signature of isInherited to take ReferenceType instead of
ClassType.

Polyglot compiles itself once more.
Only check incompatible return types for inherited methods.
Fixed most bugs identified by Jacks: Round 4.

- Fixed remaining access control issues, except for certain, rare
ambiguous member bugs, which require a revision to class resolver
method.
- Fixed TypeBuilder to handle anonymous classes more gracefully.
Anonymous class is pushed in the same way, but needs to be "entered"
when the class body is visited.  This avoids a problem when the
qualifier of instance creation is also an anonymous class instance.
- Static field target might not be the field's container, but could be
the container's subclass.  This was a problem when a class inherits a
field declared in an inaccessible superclass.
- Interfaces do not have Object has superType, but implicitly declare
public methods in Object.
- Changed the order of things to search when resolving a name in a
context to respect JLS.
- A method could implement another that is not accessible in direct
superclass.
- Removed erroneous package-type clash check.

Added relevant test cases.
Fixed regression bugs.  Added relevant test cases.

- Reinstated package-class name clash check with proper conditions.
- Corrected the definition of when a method _implements_ another.
Added 3 tests for the so-called "comb rule". Methods inherited from
superclasses should hide methods in outer classes. Javac 1.7 does not
correctly implement this behavior. Seems to be fixed in Javac 1.8 and it
works in Polyglot.
Bug fixes in comb rule tests