split core declare() processing to independent function,
and add handler for dojox/drawing/util/oo::declare()
Support nested lists.

Rather than indiscriminately trimming whitespace from key values,
measure the indent on the first line of text and use that as a baseline.

For example, notice that the first line of text after a summary: keyword is indented by
two tabs, and then if three-tab text is encountered, we know it's a nested list or
a code block.
Proper tab --> space conversion.

Instead of converting every tab to four spaces, just add spaces until you get to the next tabstop.
I really only want to do this on dojo comment blocks, but not sure how to intercept comment blocks
before esprima removes the // comment characters and whitespace preceding them.

Surprisingly though converting all code is fast: my build time when from 1m 8s --> 1m 11s,
basically the same.
export tree.json file listing modules in details.xml
output nested classes into details.xml

ex: `<object location="dijit/Tree.Tree">`
make tree.js contain a module's nested classes
Generate tree from dojov1.js.

Because tree.js needs to list the exact set of objects that dojov1.js wrote into details.xml.
extension=true flag for third party properties.

Set extension=true on any properties that come from modules that the user needs to manually require, ex how LayoutWidget.js adds properties to _WidgetBase.

Refs #52, but doesn't fix the problem where only some of the third-party properties are showing up and others arent't.
Fix showing code blocks.

Do conversion of vertical-bar code blocks to standard markdown syntax before calling markdown processor, and handle code block indentation similarly to how nested lists are handled, so that unwanted indentation (plus of course the vertical bar) are removed, but indentation that is part of the actual code example is preserved.
treat return description as markdown
export tags
fix parsing of tags
Rename extension to extension-module.

"Extension" is already used by widgets to indicate that certain functions are especially meant to
be changed by the user.
give nested objects their own pages too
Make id's unique when module and directory share name.

For example, dojo/date is both a directory, and the MID of dojo/date.js.
So, giving the directory (aka folder) the id of "dojo/date/".
skip dojox/app/build

That code is for the builder, not to be used as part of dojox/app, and the MIDs in define()
don't make sense.

See https://github.com/dmachi/dojox_application/commit/ac8e05a4a35f65f185a26f91addf2f738938aa02#commitcomment-2236734.