Issue #6 - Add holder.js support

Over the weekend I set aside some time to get more familiar with the technologies we use during our day to day development - vagrant, PHP_CodeSniffer, jshint, WP CLI etc. I am eventually aiming to move my whole development workflow into the command line, but the transition from Windows to unix command line is painful.

Anyway, I wanted to test the workflow on a real project - and I chose the Media Placeholders plugin. Adding holder.js support seemed like a good and fun challenge. The implementation is not air tight yet, but it works. This is the general outline of the approach I used:

* Switching to the offline mode (= holder.js is used) is done through a filter. Can we somehow detect if a machine is offline? Would PHP's `checkdnsrr` be reliable and fast enough?
* I'm creating a JS index of attachments that contains their natural dimensions. This is called a `catalogue`. Catalogue should be cached indefinitely as the query string attached to the `attachment-catalogue.js` file identifies its contents uniquely and serves as a cache buster.
* I'm observing the error event In the event capture phase to get a list of images that need replacement.
* When there's an error event raised by `img` element, I'll check the requested filename and try to extract the image's natural dimensions from the filename. When this fails, I'll look into the catalogue to find out the attachments dimensions. If this fails as well, then the image that failed was probably not a registered attachment and I'll try to find out it's set dimensions - either from the `width` and `height` attributes or using `getComputedStyle`.
* When we have the dimensions, we can change image's `data-src` attribute to match holder.js preset and run holder.js passing it the image's unique className.

There's a lot of room for improvement, but I only had a limited amount of free time over the weekend - for example caching the catalogue should be implemented much more cleverly, but I think the implementation may serve as a proof of concept that this front end substitution is possible.