Completely remove the --stats option.

This was an experiment, but turned out to be not very useful.
Better to leave the statistics generation to external tools.
Add Logger as dependency for FileCategries.
Remove some final pieces of Stats module.
Change how class members are internally stored.

Instead of storing members in two hashes - :members & :statics -
the members are now stored in simple :members array.

Lots of refactoring, but in the end the unit tests are all passing
and running JSDuck against ExtJS SDK works fine.  More work is needed
though as now JSDuck::Class contains several methods and algorithms
that are inappropriate in the context of new data structure.

Here I'm only changing the internals - export format is still the same
and so is the data structure given to generated Docs app.
New JsDuck::Class#find_members method.
New JsDuck::Class#invalidate_search_cache! method.

To go along with #find_members.
Enhance #find_memembers to allow for exclusion of static members.

Like with old #get_members the :static option can be true, false or nil.
With :static=>false only non-static members are returned.
Take the new JsDuck::Class#find_members into use.

Discard JsDuck::Class methods:

- members
- constructor_first
- members_hash
- local_members_hash
- get_members
- all_members
- reset_members_lookup!

The new #find_members replaces most of them.

Moved sorting and ordering of constructor into FullExporter,
so the #constructor_first method still exists, but is elsewhere.
Also added tests for exporter, but the export format still
remains the same.

The code for warning about statics in singleton moved to Lint.

Related to this there's one change in behavior - static members
in singleton are no more cursed into instance members.  That's
because a singleton actually can contain static members, though
it's silly and JSDuck warns about that, but you can even access
those static members in a clumsy way:

    MySingleton.statics().staticMethod();

This is where statics: {} end up when you define them in Ext 4 way
inside a singleton class.  And I've seen some classes in Ext/Touch
codebase even doing so... it's nevertheless silly.

As for the bogus @static tag use in singleton classes for members
that aren't really static - these just need to be fixed.
Remove #to_hash and #to_json methods from Class.

The #to_json wasn't used at all.

The #to_hash was only used by FullExporter where it could be replaced by
doing the cloning right in there.
Reorder and document #find_members related methods.

Remove new_* prefixes from map-generator methods.
Reuse a helper function accross many specs.
Add :local query option to #find_members.

Allowing to filter out just local (non-inherited) members.
Use the :local option in statics in singleton check.

We don't care about static members inherited from parents and mixins -
they could be completely valid in those other classes - it's the
concrete singleton who's statics interest us.
Extract MembersIndex class from JsDuck::Class.
Replace #default_members_hash with #each_member_type.

The hash is no more needed, we only need to loop through all the types.
Fix crash caused by parallel formatting of classes.
Move #icon method from Class to Icons.

Not really a responsibility of the core JsDuck::Class.
Remove unused JsDuck::Class#package_name method.
Extract ClassName class from Class.

Turns out the short class name is only needed when generating search
data - so no need for the short_name method to be in JsDuck::Class.
Eliminate JsDuck::Class#full_name method.

Easier to just use cls[:name] and keeps JsDuck::Class simpler.