Split JS files and async cleanup

- Split JS files to multiple smaller files. They are combined using requirejs.

- RequireJS is for asynchronous module loading by default but we wanted to expose jigna as a public library which is available immediately after the user loads the script. Therefore, the instructions [here](https://github.com/jrburke/almond#exporting-a-public-api) by RequireJS author on how to expose a public API are followed. A build script keeps watching the source JS files and produces one jigna.js in the dist folder.

- Clear separation between the sync client and the async client. The sync client presents a completely synchronous interface (no deferreds) and the async client presents an asynchronous interface with deferreds. We ask our users to use the appropriate interface for each client, although it presents some minor surprises for the async client. @prabhuramachandran need offline discussion for that.

- For threaded method calls, a `jigna.threaded(obj, func_name, args)` api is provided rather than polluting the proxy with 'func_name_thread'.

- 'jigna' is also added to $rootScope so that it is available to the HTML template.

- All tests passing.
Yes, but I wouldn't have a way to know which object's method to call so we need this API. Also note that we can't call arbitrary functions using `jigna.threaded(func, args)` - they have to be public methods of the domain model.