Adds support for altitude and 3D GeoJSON

This commit adds a third parameter to the L.LatLon class for specifying
altitude. This is in turn stored in the `.latitude` property for the LatLng
instance. Latitude property will only be set if the latitude parameter is not
undefined, this is done in order to ensure backwards compability.

```javascript
var latlng = new L.LatLng(10, 20, 30);
console.log(latlng.altitude); // prints '30' to the console
```

Similar functionality has been added to L.GeoJSON coordsToLatLng() and
latLngToCoords() methods in order to handle import and export of 3D GeoJSON.

```javascript
var geoJSON = {
  type: 'Feature'
  ,properties: {}
  ,geometry: {
    type: 'Point'
    ,coordinates: [20, 10, 30]
  }
}
var layer = new L.GeoJSON();
layer.addData(geoJSON);
console.log(layer.getLayers()[0].getLatLng().altitude);
```

`NB` It is important to notice that no logic has been added in order to prevent
latitude and longitude to change without appropirate change in altitude – this
must be handled by the application.
Renames L.LatLng property .altitude to .alt
Added getBounds function to CRS
Use CRS's bounds to calculate wrap
panInsideBounds: fit or center, pass options, remove boundsMinZoom

Deltas are calculated on x, y pixel coordinates separately.
Options are propagated from setMaxBounds to panBy.
No panBy loops. Fixes #1908.
test Map#setMaxBounds and Map#panInsideBounds
Hack fix for firefox android layers control. refs #2033
Comment why this hack exists and improve it with @mourner code :)
update changelog [skip ci]
minor IE CSS cleanup
update deps
add distance to dragend event data, close #2158, ref #872
Merge branch 'master' of https://github.com/Leaflet/Leaflet into tilelayer-crs-controlled-wrap
Generalized
Fixed smart tabs
merge GeoJSON altitude pull with some tweaks #1822
update changelog [skip ci]
fix problems with #1822 merge
fix FeatureGroup e.layer empty in old IE, close #1938
Fixed whitespace