Handle various deployment problems

Detect and handle these problems:
 * User is trying to deploy the extension over a local file, but forgot to grant file permissions
 * When trying to deploy on an HTML document over the file:/// protocol
 * When trying to deploy on a PDF file, withouth PDF.js

Fixes #1650 and #1663.
Smaller methods are more readable. For example if this method became:

```
function inject(tab) {
  if (isFileURL(tab.url)) {
    this.injectIntoLocalDoument(tab)
  }
  else if (isPDFURL(tab.url)) {
    this.injectIntoPDF(tab)
  }
  else {
    this.injectIntoDocument(tab)
  }
}
```

I can then read and understand everything this method does very quickly without having to scroll down the file.