Update storage of hoverzoom data links, add image rotation, add Hz.Plugin, add Hz.Cache, update most plugins.

This is a quite big update, since some changes cover the plugin system.

* Move hoverZoom to Hz namespace (shorter, which is nice with the new objects)
* Hz changes:
** Turned it into a object, so that the public function can use the private ones.
** Add rotation functionality through css.
** Positioning had to be updated for the rotation functionality.
** Don't bind mouse events on document, but on the links.
** Update the preloading to support galleries as well.
** Caption no longer child of hzImg, otherwise rotation would rotate captions as well.
   Therefore it needs to be placed statically as well.
** hzImg css updated: pointer-events: none. (removes the click-through code)

* Add Hz.Data:
** contains all the data is needed (src, caption, etc)
** Makes it easier to swap all the data for gallery view
** Data in it: src, caption, rotation, gallery data
** Contains some commonly used functions
** This forced me to update all plugins, so I created a class for them.

* Add Hz.Plugin:
** JS object for plugins
** has predefined behaviour that many plugins used
** Most plugins don't need to define their own 'prepareImgLinks'.
   Instead they specify a prepare specification, which can perform filter,
   replace strings (old urlReplace function), ajax requests, etc ...
** If necessary each plugin could still define a prepareImgLinks,
   but all current plugins can do their tasks with the spec.
** Specs described in js/hzPlugin.js

* Add Hz.Cache:
** Some plugins were already using caching functionality for ajax requests.
   Therefore this generelizes it. (Used by the prepare spec)

* Options added:
** preloadGallery: Reloads gallery on view of first image
** rotateLeftKey: Key to rotate image counter clock-wise
** rotateRightKey: Key to rotate image clock-wise

* Manifest: changed load order.
** js/* files are loaded on document_start to ensure everything is
   loaded before the plugins start
** Removes the tidious 'var hoverZoomPlugins = hoverZoomPlugins || []'.

* Add Plugins:
** gravatar

*Delete plugins:
** beautify_it: page inactive
** bing: original can no longer be guessed. Maybe get API key.
   (Free API has only 5000 requests...)
** flickr (all done by flickr_a, which is always included)
** picplz: page inactive
** pictmobi: page inactive
** windowslive: replaced by SkyDrive. Requires API access_token
** vk: used api outdated. New requires API key
** phapit: constructed url no longer valid. Cannot be guessed.

* All other plugins updated to support the new specs
Fixed deviantArt (fixes issue 392)
Added Dropbox support (fixes issue 370).
Added Newegg plugin (fixes issue 381).
Updated donation link (fixes issue 401).
New URLs, update notification.
Fixed Wordpress and Amazon.
Started integrating Andre Hilsendeger's contributions (gallery support and fixes).
Fixed zip command line.
Added support for newegg.ca and newegg.com.cn (fixes issue 397.
Newegg.com.cn support.
Fixed deviantArt links with no data-super-img attribute.
Fixes issue 404.
Fixes issue 412.
Removed warning. Rotation works fine there
Store options in the synced storage.

The options are now stored in chrome.storage.sync, instead
of the localStorage of the background page.

common.js:
* Add HzOptions. No need to go hrough the background page
  with the synced storage. But it's still async.
* Add the option update messaging into HzOptions. Reduces code
  in other files. Other files just pass callbacks for updates.
* Add HzKeyCodes for two reasons:
  1. There was code in two places 'handling' keyCode to name mapping.
     One in common.js, and one in options.js. That's merged now.
  2. With synced storage there will be cases of mixed options from
     Mac and Win/Linux. If Ctrl is stored as action key in Win, then
     that's the Command key in Mac, and vice versa. HzKeyCodes deals
     with that. (Needs testing for Mac...)
* Simpliyy default options
* Add code to convert options from localStorage to the syced one

background.js
* Removed all option query/set code from background.js. That's
  covered by the synced feature.
* Remove ajax request code. That's handled by Hz.Plugin.

Rename options to Hz.options for content scripts and plugins

update-notif.html:
* Move js code to own file. It wasn't working due to content script
  security policies.

options.js:
* Replace redundant checkbox code by loops.
Create README.md
Update HzData prototypes.
Small options page fix
Messaging update.

* Add HzMessages for messaging.
** It replaces the deprecated request system by the newer message system.
** Hz.send_X_, different message sending functions, which
  add an action key to the message. Makes the send calls shorter.
** Hz.Messages.receive take a mapping from actions to handler functions.
  For example {showPageAction: function(msg, sender) {...} }
  This receive mapping would be called on messages with the
  'showPageAction' action.

* All uses of requests have been replaced by the HzMessages functions.

* Fix preload from popup. It was broken since the namespace change.
Typo in openImageInWindow
Use chrome.storage.local instead of storing through background page
Add option to limit cache usage.

User can change maximum cache size in options. The default value is
chrome.storage.local.QUOTA_BYTES. If the quota is exceeded or the
maximum cache size value, some random cache values are deleted.
Cannot tell which ones are the oldest or which ones are more
important. storing further information in cache would limit it
capacity, therefore just delete some random value.

Hz.Cache add functions to:
* remove data untill it fits into the user defined size
* query the used size

Hz namespace change:
* Init in common.js, other files just add to it.
* Reduces dependencies between files