Use Passcards site info service to fetch site icons

This makes site icons available in the web app and Chrome extension
versions of passcards.
Add missing Q require() and missing promise termination handlers
Give Passcards permission to communicate with Passcards site info service in Chrome ext
Add missing checks that a component is mounted before triggering re-rendering

When an image update is received for an icon control or a content update
for the details view, check that the component is still mounted before
trying to update it.
Split SHA1 functions out into their own library

This is to facilitate re-use of the SHA-1 code elsewhere
in the app.

It also clarifies the licensing since only the SHA-1 code
in lib/crypto/sha1 is derived from Rusha as described
in the comments at the top of the file. The PBKDF2 code is not.
Fix tslint errors
Use the local versions of tools when building passcards

Use the binaries in node_modules/.bin instead of
relying on the same version of the binaries to have already
been installed separately with 'npm install -g'.
Fix HTTP requests with binary responses in the browser.

Set the response type for XHR requests to 'arraybuffer' to ensure
correct delivery of binary data when making HTTP requests in
the browser.

This required working around an issue with XMLHttpRequest.responseType
described in https://github.com/substack/http-browserify/issues/65
Add basic test for Passcards API client