Fix imprecision in type inference when merging a point array type and cone array type

In TypeInference when merging a PointType with a ConeType it is safe to return the cone type if
the underlying types are the same. Previously, if an array cone type and array point type were
merged this would result in a java.lang.Object even when the two arrays had the same base type.
Checking for equality first may also save a few cycles for reference types since the
isSubclass check is no longer performed for identical types.
Check class of parent variable directly rather than using instanceof check. Needed to get correct behavior for subclasses of ClassHierarchyMethodTargetSelector
adding comment explaining why instanceof check was replaced
Merge pull request #52 from sblackshear/master

Check class of parent variable directly rather than using instanceof che...
Fixing bug in ClassHierarchy.getLeastCommonSuperclass

If C1 extends C2 extends C3 getLeastCommonSuperClass(C1,C2) would give C3 instead of C2
Merge remote-tracking branch 'wala/master'
adapt to field-based api changes
tests for field based
tests to compare with field based
more testing for field-based callgraphs
more tests for field-based call graphs
heurisitics to make readable names for anonymous functions
1) handle files with byte order marks
2) ignore code in comment blocks
ignore generated variables in hack for window state
split constructor logic out of target selector, so that it can be reused
more flexibly in the field-based builders
handle more cases with constructors
tweaks to models
use commons io library
use commons io library
put commons-io-2.4 in more places