Proof of concept using chrome.streamsPrivate API

This method captures all application/pdf streams, loads the viewer
and passes the stream to the PDF.js viewer.

This commit shows a proof of concept using the chrome.streamsPrivate API.

Advantages of new method:
- Access to the response body of the original request, thus fewer
  network requests.
- PDFs from non-GET requests (e.g. POST) are now supported.
- FTP files are also supported.

Possible improvements:
- Use declared content scripts instead of dynamic chrome.tabs.executeScript.
  This allows the extension to render the viewer in frames when the
  extension is disallowed to run executeScript for the top URL.
- Use chrome.declarativeWebRequest instead of webRequest, and replace
  background page with event page (don't forget to profile the
  difference & will the background/event page still work as intended?).
Insert dummy content script at every location.

This is needed for propagating the extension's permissions
to the extension's iframe.

TODO: Check again, in Chrome 31, it seems to not be needed any more.
Use tab-specific stream storage

Also:
- Use webNavigation.getAllFrames to find out whether the navigation has
  already started. This is (at least) needed for top-level navigation to
  a stream. The webNavigation.onErrorOccurred event has become obsolete,
  and has been removed.
Integration tests for Chrome extension
Work-around for http://crbug.com/276898

When a new incognito session is started, the
onExecuteMimeTypeHandler event is often not
dispatched in time. Instead, it's triggered
in the non-incognito profile.

This commit offers a work-around that allows
new incognito instances to view PDF files.
As of this commit, all tests in
test/chrome_extension_tests will pass.