Make it possible to track the exact location of where extracted messages are located.

Summary: Modify pybabel so that the extract_javascript method yields the start and end position for the matched messages. Makes it possible to inject strings later on.

Test Plan:
Try running the following script:

    import babel.util
    import babel.messages.extract

    insert_text = "TEST"

    with open("../../javascript/goals-package/goals.js") as input:
        offset = 0
        file_contents = input.read()
        input.seek(0)

        iter = babel.messages.extract.extract_javascript(input,
            babel.messages.extract.DEFAULT_KEYWORDS, [], {})

        for (line, funcname, message, comments, start, end) in iter:
            file_contents = ''.join((file_contents[:start - offset + 1],
                insert_text,
                file_contents[end - offset:]))
            offset += end - start - 1 - len(insert_text)

        print file_contents

you'll see that the fill is appropriately modified:

    title: $._(TEST),
    { description: $._(TEST), type: "GoalObjectiveAnyVideo" },
    $(this.innerEl).text($._(TEST));

Additionally I modified the file to add in some calls with arguments and plurals and it still worked:

    title: $._(TEST, true),
    blah: $.ngettext(TEST, 42),

Reviewers: csilvers

Differential Revision: http://phabricator.khanacademy.org/D2040
Add in an option to extract_javascript to allow you to return only the messages and their start and end positions.
Added a lot more documentation to explain how this works.
Clarify some of the usage of the new extract_javascript.