Merge accelerators in Mozilla .properties files

Fixes bug 115.
Align dtdfile.makeindex() with that of base class

To TranslationStore.makeindex() populates, among others, an “id_index”
dict, while dtdfile’s just populates an “index” and the code in
accesskey module expects the later, so align them together to avoid the
hack in propfile.makeindex()from the previous commit.
Simplify tests

After the previous commits, TestProp2PO.prop2po() can take an optional
personality kwarg, so use that.
Docs: document properties files access key changes
Generalize entity encoding/decoding code

So that it can be used with custom set of entities.
Handle nonentities at end of string

We were passing through things like ”&copy ” (notice the space) but not
“&copy” (no space) which was completely dropped from output.
Don’t touch existing entities in entityencode()
Use quote.entityencode()/entitydecode()

They provide more sophisticated handling of entities than blind replace,
will allow us to handle the ampersand properly.
Support &amp;

The roundtrip test for “&amp;nbsp;” is failing, need to find out how to
fix it or whether it is a valid input or not.
Fix DTD tests

Make sure strings like “&amp;nbsp;” survive roundtrip conversion by
leaving “&amp;” unchanging when decoding it will result in a new entity.
Docs: document changes to DTD files entities
accesskeys: add whitespace to combine() for reasability
accesskeys: combine using correct case

We always thought, or claimed that we combined accesskeys based on
prefering the case before using an alternate case.

It seems that our code actually prefered uppercase and then would try
lowercase.  Thus this string:

"Close Other Tabs" combined with an accesskey of "o" would result in
"Close &Other Tabs" because capital O would win even though lowercase O
was present.  The correct combineation should have been "Cl&ose Other
Tabs", preferring the correct case before the alternate case.