Bug 805163 - Optimize and minimize the JS files (AMD). r=gandalf

With this patch, L20n now uses AMD modules.

 - modules are defined with a Simplified CommonJS Wrapper,
 - on the server side, amdefine is used to provide the 'define' function,
 - on the client side, dryice modifies the source files such that modules are
   not anonymous and have proper dependecies,
 - furthermore, on the clientside, 'define' and 'require' are provided by
   https://github.com/jrburke/almond (1KB minified)
 - if not using the built version, you must use an AMD loader, e.g. require.js.

4 use cases are supported:

Client side production
----------------------

'make build' produces dist/l20n.js and dist/l20n.min.js which can be included
in a script tag and are synchronous:  you can access window.L20n right away.

Server side production
----------------------

'npm install' will make 'l20n' available as a module; we need to land bug
866723 to make this work fully.

Client side development
-----------------------

There are a few ways to make this use case work.

The simplest one is when you're just working with the context and friends:

    <script src="require.js"></script>
    <script>
      require(['../js/lib/l20n'], function(lib) {
        // note that window.L20n is undefined
        var ctx = lib.L20n.getContext();
      });
    </script>

If you want to get the bindings as well, require them directly.

    <script src="require.js"></script>
    <script>
      require(['../js/lib/l20n/bindings/html'])
    </script>

or

    <script src="require.js"></script>
    <script>
      require(['../js/lib/l20n/bindings/html'], function(bindings) {
        // the bindings act as a proxy for the L20n singleton
        var ctx = bindings.L20n.getContext();
        // and you can require other modules, too
        var Parser = require('../js/lib/l20n/parser').Parser;
      });
    </script>

or

    <script src="require.js"></script>
    <script>
      require({ baseUrl: '../js/lib/' }, ['l20n/bindings/html'],
      function(bindings) {
        // thanks to baseUrl, you can now require things from inside of the
        // callback using module names
        var Parser = require('l20n/parser').Parser;
      });
    </script>

Server-side development
-----------------------

This will be very useful for running tests.  In node, you can simply
require('./lib/l20n'); or any other module using relative paths.

* * *

Summary: we end up with a modular code and a simple to use build system.  With
these changes, it will be easy to have a different IO library for the client
and for the server.