folder() shouldn't throw an exception

Like remove(), without any argument, we should just return `this`.
Fix : the folders wasn't marked as folder.

Also, add some unit tests.
Load zip : a new way to read them.

Instead of reading the central dir and then the local dir (and trying to
handle all the cases, data descriptors, data descriptors with zip64, etc)
I just read the central dir, hoping that everything is here. (The only
exception is the file name : for some reasons, some zip have the real
name : with / instead of \ in the local dir)

This fixes an issue with nested zip files and data descriptors. When the
size was 0 in the local dir, we would seek the next occurence of the
data descriptor signature. With zip containing data descriptors, this
would lead to a bug.

This should also help the issue #30 : the new code avoids the overhead of
looking for data descriptors.

Other change : I explained the limitations of the zip64 extensions in
the browser.
Merge pull request #31 from dduponchel/issue30

Use the central dir instead of the local file header (+ other patches)