code: function Package(name, parent) {
      /**
       * URL the package has been loaded
       * @attribute $url
       * @readOnly
       * @type {String}
       */
      this.$url = null;
  
      /**
       * Name of the package
       * @attribute $name
       * @readOnly
       * @type {String}
       */
      this.$name = name;
  
      /**
       * Package configuration parameters.
       * @attribute $config
       * @readOnly
       * @private
       * @type {Object}
       */
      this.$config = {};
  
      /**
       * Package ready promise.
       * @attribute $ready
       * @type {zebkit.DoIt}
       * @private
       */
      this.$ready = new DoIt();
  
      /**
       * Reference to a parent package
       * @attribute $parent
       * @private
       * @type {zebkit.Package}
       */
      this.$parent = arguments.length < 2 ? null : parent;
  }
docs: Package is a special class to declare zebkit packages. Global variable "zebkit" is
  root package for all other packages. To declare a new package use "zebkit" global
  variable:
  
  // declare new "mypkg" package
  zebkit.package("mypkg", function(pkg, Class) {
  // put the package entities in
  pkg.packageVariable = 10;
  ...
  });
  ...
  
  // now we can access package and its entities directly
  zebkit.mypkg.packageVariable
  
  // or it is preferable to wrap a package access with "require"
  // method
  zebkit.require("mypkg", function(mypkg) {
  mypkg.packageVariable
  });
  
  @class zebkit.Package
  @constructor