ol.Collection and @template

This is an attempt/work in progress to make a more thorough use of `@template` for `ol.Collection`.

At this point I get more warnings at compile time:

```
../src/ol/collection.js:123: WARNING - Unable to determine type of parameter ol.Collection.prototype.forEach for exported function opt_obj$$29
ol.Collection.prototype.forEach = function(f, opt_obj) {
                                              ^

../src/ol/collection.js:149: WARNING - Unable to determine return type for exported function ol.Collection.prototype.getAt
ol.Collection.prototype.getAt = function(index) {
                                ^

../src/ol/collection.js:171: WARNING - Unable to determine type of parameter ol.Collection.prototype.insertAt for exported function elem$$1
ol.Collection.prototype.insertAt = function(index, elem) {
                                                   ^

../src/ol/collection.js:185: WARNING - Unable to determine return type for exported function ol.Collection.prototype.pop
ol.Collection.prototype.pop = function() {
                              ^

../src/ol/collection.js:197: WARNING - Unable to determine type of parameter ol.Collection.prototype.push for exported function elem$$2
ol.Collection.prototype.push = function(elem) {
                                        ^

../src/ol/collection.js:211: WARNING - Unable to determine return type for exported function ol.Collection.prototype.remove
ol.Collection.prototype.remove = function(elem) {
                                 ^

../src/ol/collection.js:211: WARNING - Unable to determine type of parameter ol.Collection.prototype.remove for exported function elem$$3
ol.Collection.prototype.remove = function(elem) {
                                          ^

../src/ol/collection.js:230: WARNING - Unable to determine return type for exported function ol.Collection.prototype.removeAt
ol.Collection.prototype.removeAt = function(index) {
                                   ^

../src/ol/collection.js:247: WARNING - Unable to determine type of parameter ol.Collection.prototype.setAt for exported function elem$$4
ol.Collection.prototype.setAt = function(index, elem) {
                                                ^

0 error(s), 9 warning(s), 95,1% typed
```