Issue #222: formal API support
* Catch api/* urls
* api/v1/foo/bar/... urls are parsed as an API call containing parameters. Extra parameters can be added as GET ones.
* New API class to manage API requests. 6 API services implemented:
    - entity: Return all translations for an entiry (equivalent to /string/ Json API)
    - locales: Return the list of locales for a repository
    - repositories: Return the list of repositories supported by the API
    - search: Search on repositories (equivalent to current Json API on main page for strings and entities)
    - tm: Translation memory, similar to the Amagama service
    - versions: returns the different versions of the API with their status (beta, stable, deprecated)
* API public methods (none static):
    - getParameters()
    - getExtraParameters()
    - getService()
    - isValidRequest()
    - invalidAPICall()
* Invalid queries return a 400 response and a json object with details on why the request is invalid
* New Project class to make key data available everywhere in the application without using globals
* Project public methods (all static):
    - getRepositories()
    - getRepositoriesNames()
    - getGaiaRepositories()
    - getDesktopRepositories()
    - getRepositoryLocales()
    - getReferenceLocale()
* Updated Strings class with these static methods:
    - levenshteinUTF8()
    - levenshteinQuality()
* Refactored all search views to be MVC and separate data generation from presentation (needed to redirect JSON API calls to new v1 API services)
* API changes:
    - Entity service returns an empty json array for invalid entities + filters out {ok} strings for mozilla.org
    - The "Strings and entities" json source is no longer supported
* Tests for all public methods
* www.mozilla.org in select box is now displayed as mozilla.org