Allow styles to override feature geometries

With this change, application developers are able to define styles that
render a different geometry than the feature geometry. This can e.g. be
used to render an interior point of a polygon instead of the polygon, or
to render symbols like arrows along lines.
Add an example showing the use of ol.style.Style#geometry
Add tests for setGeometry
Use getGeometryFunction() in immediate API
Allow geometryFunction to return undefined
Create typedef
Assert that feature.get('foo') returns a geometry
Add a getGeometry method
Merge pull request #3010 from ahocevar/style-geometry

Allow styles to override feature geometries
Use an API function to extend the extent
Update closure-library version

fixes #3034
Merge pull request #3058 from ahocevar/extend-coordinate

Use an API function to extend the extent
Unconditionally draw Replay's
Add a renderBuffer option to ol.layer.Vector
Add handle*Event options to ol.interaction.Pointer

More specifically: handleDownEvent, handleDragEvent, handleMoveEvent, and handleUpEvent.
Make ol.interaction.Pointer call handleMoveEvent
Make shouldStopEvent default to the identity func
Add ol.Map#getTargetElement

ol.Map#getTarget returns an element or a string, depending on what was passed to setTarget. This commit adds a getTargetElement method that always returns an Element.
Merge pull request #3060 from fredj/update-closure-library

Update closure-library version
Add ol.geom.flat.transform.translate