Extensions refactoring: unified way of getting an extension; new base class "Extensible"

Removed multiple extension retrieval methods and replaced them with
common `extensions.TYPE(NAME, …)` as in `extensions.store(“sql”, …)`.
Since now extensions can provide info without instantiation: added info to backends and removed flag is_model_provider
Allow aggregate names not to be specified
Beginning of browser abstraction: separated provide_aggregate() from aggregate(), aggregate() now supports prepared arguments for provide_aggregate()
[backend-ga] Removed preparation code which is now in the browser superclass.
[backend-sql] added exclude_null_agregates browser option
Fix filter for empty aggregates
Added Dimension.parent; is_flat and has_details is forwarded to the parent if exists

This addition is necessary for dimensions that are created by limiting
hierarchies and levels when they become single-attribute dimensions.
Added cube.aggregate()
[backend-sql] added count_distinct function
implicit_aggregates behavior now omits an implicit aggregate if an
explicit aggregate with same function and measure already exists.
Merge branch 'su/extensions'
Reflect requirement for existing extension
Fixed test after recent changes to implicit aggregates
Added async request logger to server (experimental)
Include extension options and correctly collect their types