introduced immutable collection interface

Splitted the Collection interface into Collection and ImmutableCollection to make it possible to restrict access to your collection type and still have the benefits of the Doctrine Collection framework. This way you can force the use of add and remove methods in the Entity.

This could also lead to more efficient use of HHVM Collections in the future.
http://docs.hhvm.com/manual/en/hack.collections.immutable.php

Please comment on the idea and the naming of the interface.
I find it weird to say `Collection` (mutable) `IS A` `ImmutableCollection`. In fact a mutable collection is not a subtype of an immutable collection. Instead, mutable and immutable collections are sibling descendants of readable collections.
I would propose the following hierarchy instead:

- `ReadableCollection` -> `Countable`, `IteratorAggregate`
- `Collection` -> `ReadableCollection`
- `ImmutableCollection` -> `ReadableCollection`

The `ReadableCollection` would be the base interface for all collections that provides only methods for read operations.
The `Collection` interface additionally provides mutator methods and therefore is considered mutable.
The `ImmutableCollection` interface is basically a marker interface that defines the contract for subtypes to be immutable.

This hierarchy is much cleaner IMO. What do you think?