Refactor Collections to use interfaces, intermediate step.

Signed-off-by: Timo Kinnunen <timo.kinnunen@gmail.com>
Refactor Collections to use interfaces, intermediate step 2.

Signed-off-by: Timo Kinnunen <timo.kinnunen@gmail.com>
Refactor Collections to use interfaces, intermediate step 3.

Signed-off-by: Timo Kinnunen <timo.kinnunen@gmail.com>
Refactor Collections to use interfaces, intermediate step 4.

Signed-off-by: Timo Kinnunen <timo.kinnunen@gmail.com>
Refactor Collections to use interfaces, intermediate step 5.

Signed-off-by: Timo Kinnunen <timo.kinnunen@gmail.com>
Refactor Collections to use interfaces, clean up list of classes, use
default methods to provide skeletal implementations, replace package
internal API contracts with public interfaces.

Signed-off-by: Timo Kinnunen <timo.kinnunen@gmail.com>