Remove elevationProfileSegment pointer from StreetEdge

This should close #1533. The changes:

- Create a StreetWithElevationEdge, extending StreetEdge, storing elevationProfileSegment pointer
- We use the StreetEdgeFactory for OSM builder and ShapeFileBuilder, removing any OSM specific-stuff (label removal helped in this)
- Old classes deriving from StreetEdge are deriving now from StreetWithElevationEdge (PartialStreetEdge, AreaEdge)
- Rework a bit the various interfaces, removing carSpeed as constructor argument (we have a single constructor now, if one want to specify carSpeed there is a setter for this)

The only drawback with this optimization is that due to 8 bytes rounding of object size by the JVM, we go down from 64 bytes to... 64 bytes. But in the "long term" we will shave off 4 bytes from every street object, so an estimated >3% size improvement when no elevation data is needed.

Note: Now when building a graph we need to know beforehand if we want to have elevation data or not, as OSM/Shapefile builders need to have the properly configured edge factory.