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.