Add view abstraction

This PR suggests abstracting out the concept of views. This work will enable configuring a map with a 2D view or a 3D view. `View2D` only is supported for now.

The API is the one [I described](https://groups.google.com/forum/#!msg/ol3-dev/B2boA4pG5II/2Rx-2-cyT-kJ) on the ol3-dev mailing list. This is for example how you can create a 2D map:

```
new ol.Map({
  view: new ol.View2D({
    center: new ol.Coordinate(5, 45),
    zoom: 0
  })
)
```

If no view is provided by the user then the `ol.Map` constructor creates an `ol.View2D`. It is then possible to do for example `map.getView().setCenter(...)` to change the map view.

The controls and interactions are currently 2D only. They use things like

```
map.getView().setResolution()
```

and therefore assume that `map.getView()` returns a `View2D` object. Controls are interactions meant to work both in 2D and 3D modes will need to be changed. We may also decide that `View3D` should support 2D operations like `setCenter`. This is to be determined.

The case of renderers is pretty much covered already. 2D renderers use

```
map.getView().getView2D()
```

and get a `View2D` object back, on which they can call `getCenter` or `getResolution`. (Calling `getView2D` on a `View2D` object just returns that `View2D` object.)

Thanks for any review. (I already got a number of review comments from @twpayne. Thank you Tom!)