Improve UnionType::meetWith and ArrayType::meetWith type recovery.

ArrayType when meeting with type instead of creating an union every time:
* checks if 'other' is compatible with the ArrayType, if it is
 * checks if other's 'completeness' is less then current BaseType, if it is, unchanged type is returned.
 * checks if sizes of BaseType and other match, if they do, checks if other is less complete ( SizeType vs NonSize type ),
   if that happens unchanged type is returned
 * then it clones the BaseType and tries to 'meetWith' with other, if this results in unchanged type, unchanged type is returned
 * otherwise a new ArrayType is returned, with it's size recalculated based on new BaseType

UnionType when meeting:
* Another union - will now meetWith all member types instead of only the first ( Not sure of this change actually )
* With other type :
 * 'other' type is matched agains each field in this union
 * the best meetWith result is used.

SizeType is no longer compatible with undefined NamedTypes ( 0 - sized ones )
Extracting Range analysis into a FunctionPass
Finished converting RangeAnalysis into a FunctionPass
Merge branch 'range_pass_extraction' into next

First stepping stone to converting Boomerang to Pass-based architecture.