Introduced the notion of a fully-qualified name (FQN) and a name.

This is to distinguish between a full, computer-readable naming scheme such as a URN, and a human-readable short name derived from the FQN.  As this has generalised the URN parsing we used to do, it can now also handle the case where a FQN is a URL (a common use case).  The parsing rules can be easily overridden for customisation.

The FOI name parsing from an observation record has been made more robust, as during testing of some SOS instances, there were cases of observation records that didn't have associated FOIs.

Furthermore, two new functions: getOfferingByName() and getOfferingsForProcedureId() allow additional methods for discovering available offerings.
General mechanism to configure the components of a SOS.App.

Any properties set on sub-objects of SOS.App.config.app.options.components, (via the function setAppComponentsOptions()) will be passed down to the corresponding component on instantiation.

For example:

app.setAppComponentsOptions({
  plot: {
    plot: {options: {zoom: {interactive: false}}},
    format: {value: {digits: 1}}
  },
  table: {
    table: {options: {scrollable: true}}
  }
});

will turn off mouse-scrollwheel zooming for the app's plot, and show the values displayed in the plot's tooltips to one decimal place.  Furthermore, it will ensure that the app's table is scrollable.
Mods. to SOS.Map to make it easier to customise the map.

SOS.Map now has an option: useOsm, to use OpenStreetMap as the map's base layer, rather than a WMS.  Along with this, it's now easier to set the map's initial view, using either the centre and zoom options, or the params.restrictedExtent option.

These mods., along with those of the previous commit (921b7d7369ecc77160e30f91af6219959124b56c - general mechanism for configuring a SOS.App's components) now mean it is far easier to customise the map component of a SOS.App.

For example:

app.setAppComponentsOptions({
  // Setup map component to use OpenStreetMap
  map: {
    map: {
      options: {
        defaultProjection: new OpenLayers.Projection("EPSG:4326"),
        centre: new OpenLayers.LonLat(146.48, -41.7).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")),
        zoom: 8,
        params: {
          projection: "EPSG:900913",
        }
      }
    },
    baseLayer: {options: {useOsm: true}},

    // This SOS has its FOI coordinates as lon/lat
    featureOfInterestLayer: {options: {crs: {format: {xy: true}}}}
  }
});

will set the baselayer to use OpenStreetMap and centre the map on Northern Tasmania.  Furthermore, this SOS instance's FOI coordinates are in lon/lat, so we inform OpenLayers of this fact.
Updated the documentation and examples pages, to reflect the latest code mods.

Namely new functions for retrieving offerings: getOfferingByName() and
getOfferingsForProcedureId(), and new function for accessing an
observation record's FOI: getFeatureOfInterestFromObservationRecord().