Move esprima and escodegen requires
Make library work with assignments of function expressions

Now allows:

    var count = function(from, to) {
        if(from >= to)
            return from;

        return count(from + 1, to);
    }

    console.log(count(0, 1000000));

And:

    var count;
    count = function(from, to) {
        if(from >= to)
            return from;

        return count(from + 1, to);
    }

    console.log(count(0, 1000000));

Uses estraverse instead of traverse
Fix up function ID equality
Add '-c' flag to input and output a JSON AST
switch to Constellation/estraverse

estraverse is made for traversing spidermonkey ASTs. It is more
appropriate and should be faster.

/cc @Constellation since he likes hearing that people use his projects
fixes #2: generate fresh identifiers
optimised escope usage as recommended in #8
Don't optimise if a function node is found
Merge remote-tracking branch 'origin/pr/5'

Conflicts:
	index.js
	package.json
Merge remote-tracking branch 'origin/pr/8'

Conflicts:
	index.js
Fix merge errors

Stopped working on this before I pushed and forgot to test.