Make data-l10n-args work

* this was not properly passed from localize() to getArgs()
* ctxdata was not being looked at when resolving identifiers
Merge pull request #19 from matthiasmullie/args

Make data-l10n-args work
Follow-up to #19 which broke the compiler.

Context data is looked at in VariableExpression, so no changes are needed in
Indentifier.  Also, fixes text width.
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.
make headNode local and remove visibility trick, that we don't need anymore
keep var outside of loops
move fireLocalizedEvent to retranslate