Merge pull request #493 from yukoba/SetFlatten

GROOVY-6969: Set.flatten() should return Set
GROOVY-6970: Type checker should be able to choose between two equivalent interface methods
GROOVY-6849: In case of ambiguity, type checker should be able to choose between an extension method and an interface method
Added missing documentation to BenchmarkInterceptor.java
Added javadoc comments to several Meta* classes
Fixed compilation warnings for javadoc
GROOVY-6971: try to improve performance of GeneratedMetaMethod.Proxy#proxy()
change condition mistake
GROOVY-6928: Support all the Java 6 classes at createSimilarCollection() and createSimilarMap()
GROOVY-6952: Add List.removeAt(int) and Collection.removeElement(Object), because for List<Integer>, List.remove(int) and Collection.remove(Object) are troublemakers.
GROOVY-6928: Support all the Java 6 classes at createSimilarCollection() and createSimilarMap()
GROOVY-6944: Add immutable collections.
Immutable collections are convenient for backtracking algorithms.

The implementation is based on Blackdrag's PCollections.
http://pcollections.org/

As the license of PCollections is MIT license,
it can be merged to Groovy, which is Apache license.

I modified API, and wrote unit tests, and fixed bugs.

What I changed.
1. All the public class names start with `Immutable`.
2. All the implementation classes are package scope and marked `Serializable`.
3. `Empty` class is renamed to `ImmutableCollections`.
4. `ImmutableCollections` can create not only empty collections but also convert from an `Iterable` to an immutable collection. HashTreePBag, HashTreePMap and  HashTreePSet, which are static convenience classes, are removed.
5. `PVector` is renamed to `ImmutableList`.
6. `POrderedSet` is renamed to `ImmutableListSet`. The name `ListSet` comes from Scala. I didn't use the name `OrderedSet` because it does not have a comparator.
7. `minus()` of PCollections can remove an element and also can remove a specified position element, but this API creates bugs on using `ImmutableList<Integer>`. Therefore I changed one to `minusAt()`. For consistency, I also renamed to `plusAt()`. And `with()` is renamed to `replaceAt()`.
8. Removed `PSequence` interface. `ImmutableStack` extends `ImmutableList` like `Stack` extends `List`.
9. A new instance can be created by `[] as ImmutableList`.
10. `Iterator` of `ImmutableList` and `ImmutableStack` are same as the original, but `ListIterator` is backed by `Object[]`. I think this is faster than the original.
11. `DefaultGroovyMethods.plus()` , `minus()`, `multiply()` can handle `ImmutableCollections`.
12. `minus(no argument)` of `ImmutableQueue` is renamed to `tail()`.
13. Renamed `Collection.asImmutable()` to `Collection.asUnmodifiable()`, and deprecated the original method.
14. Implemented `Object[] as Queue` and `Object[] as Stack`.
15. Changed `ImmutableQueue` to `ImmutableDeque`.
16. Changed scope of `ImmutableStack` to package scope. Use `ImmutableDeque` instead.
17. Changed scope of `ImmutableBag` to package scope. Use `ImmutableList` instead.
18. Added `minusAt()` and `replaceAt()` to `List` and `Object[]`
GROOVY-6952: Add List.removeAt(int) and Collection.removeElement(Object), because for List<Integer>, List.remove(int) and Collection.remove(Object) are troublemakers.
GROOVY-6966: Type cast methods for Collection classes.
Merge branch 'CreateSimilarCollection' into MergeAll
Merge branch 'RemoveAt' into MergeAll