Use Huffman algorithm for hints generation (fix #112)

The Huffman algorithm is now used to generate optimal prefix codes for all
focusable elements. The area of each element is used as _weight_. The
higher the weight, the shorter the hint.

Note:

The old algorithm seemed to give shorter hints to `<a>` elements. That is
currently not the case with the new algorithm.

Other related changes:

- Change minimum allowed number of hint chars from 3 to 2, since the new
  algorithm supports it.
- Change default hint chars, since with the new algorithm the best keys
  should be at the beginning of the string.
- My editor is set to strip trailing white space. Apparently there was a
  lot of trailing whitespace in many files, so a diff of this commit is a
  bit messy.
Fix frames handling

Every frame got the same hints as the others, basically. Now
`Marker.createMarkers()` does not give its markers any hints anymore.
Instead, all markers from all frames are collected in `injectHints()` and
then given markers. I am not sure how good/nice the solution is, but it
works.
Fix new coding style
Merge branch 'develop' into huffman

Conflicts:
	extension/packages/events.coffee
	extension/packages/hints.coffee
	extension/packages/marker.coffee
	extension/packages/prefs.coffee
	extension/packages/utils.coffee
Use 2 space indentation in huffman.coffee

Just like all other files.
Fix no hint generated if only one link.
Merge branch 'develop' into huffman

Conflicts:
	extension/locale/hu-HU/options.dtd
	extension/packages/prefs.coffee
Merge branch 'bugfixes' into huffman
Code cleanup

Some minor things, and moving the `inner` function of `injectHints` into
its on function: `getMarkers`.
Merge branch 'develop' into huffman
Improve coding style and clarify a few things
Merge branch 'develop' into huffman
Refactor to clarify and enhance performance

The code should be easier to understand now, and has a more flexible API.
Thanks to the latter, we now get better performance. Before, we had to
iterate the whole array of markers generated by `injectHints` both before
and after `addHuffmanCodeWordsTo`. Now, that is not necessary anymore.
Merge branch 'betterstacktrace' into huffman
Group all hint injection code in hints.coffee

Before, the hint/marker injection code was spread out in both hints.coffee
and marker.coffee. Creation and injection of markers does not really
belong to the Marker class. It is just a wrapper around a single markable
element.

Now, all hint/marker creation and injection is done in hints.coffee. This
has several benefits: The code is a lot easier to understand, and the
number of loops over arrays of markers could be reduced a lot, enhancing
performance.

I've also cleaned the code up, as well as removed code that was totally
useless: Before, `element.getClientRects()` was scanned for rectangles
matching the `isRectOk()` test. However, none of them could ever pass,
since `isRectOk()` looks for width and height properties on the
rectangles, which do not even exist (however, they do on the rectangle
returned by `element.getBoundingClientRect()`). This also fixes the uncaught
ReferenceErrors complaining about undefined width and height properties.
This also removed unnecessary loops, which enhances performance even more.

Some of these changes could have been made outside the huffman branch, I
realize now. However, it would take some work, and I'm not sure it is
worth it.

An improvement I noticed with this patch: It is now possible to click the
green, hidden until hover install buttons on AMO:
https://addons.mozilla.org/firefox/addon/VimFx/versions/
Merge branch 'huffman' of git://github.com/lydell/VimFx into lydell-huffman
Give more weight to link elements
Enhance performance

Instead of sorting the whole array of elements in each iteration of the
huffman tree construction, we now search backwards for the first index
where the sum to insert is equal to or greater than the weight at that
index. Directly after that index the sum is inserted. According to some
tests I made, this is about 3 times faster than before.
Implemented Bloom filters to achieve shorter hints for those shortcuts that are used often
Merge branch 'huffman' of git://github.com/lydell/VimFx into lydell-huffman