WIP
Finished fetcher module and its test. All tests are passing
Fortify tests, fix bugs it previously missed. Add logging to Fetcher.start()

The way the final add-on list is constructed was erroneous. Since merge()
uses Array#concat, elements of the array being merged don't have to have
"installs" and "manual_installs" property. (arr.concat(undefined) ->
[... , undefined]). Fetcher.start() adds a FetchResult to the front of
the array, then pass the whole array to merge(), which returns "results".
"results.installs" would be "[undefined, ....]"

What is worse is that since tests don't fail on error by defualt, all the
old tests were passing. The new tests explicitly catch the error then
handle it by failling the test.
Improve tests. Add license blocks and change author name

- Make messages more helpful when tests fail
- Wrap test_add_on_list() and its helper
- Make test_add_on_list stricter