Extracted various default values into a defaults map
Commented out function parameters that are not used
Removed tileLayer and maxzoom values from scope creation as these values can be put directly as attributes in order to minimize code in the controller.
Inlined $el variable
Normalized storage of directive's model into $scope object
Normalized exposure of Leaflet objects into a $scope.leaflet object
Extracted functions for basic setup operations of centering the map, adding & binding markers and polylines
Simplified checking for presence of model values (markers, path, etc.)
Added L.icon into L.Marker definition to better handle different marker images and dimensions (pending to make this configurable, but you can place whatever images in your app's img folder)
Fixed polyline handling:
 - Now the color is also initialized at polyline creation
 - Leaflet expects a coordinates or L.LatLng object array into L.polyline.setLatLng. Now lat & lng properties in each latlngs entry is still enforced, but it's casted to L.LatLng before passing the collection to the polyline.
Adapted specs