Move part of procession in DocAst to Tag classes.

Tags can now define #key attribute and #process_doc method - the
latter will take care of combining the results of #parse.

Detection of @hide and @inheritable is now entirely done in
corresponding Tag classes.
Extract BooleanTag base class.

Use it as a base for @hide and @inheritable.
Improve merging of code & doc data.

No more assume everything's coming from doc - also look at the
code data and merge stuff from there that didn't came from doc.

Make use of this to implement @evented and @accessor as BooleanTag
subclasses.
Implement @singleton also as BooleanTag subclass.
Implement @inheritdoc processing inside Tag class.
Turn @private tag from MetaTag to Builtin.

Builtins::Tag now supports the @signature attribute like MetaTag.
For now the signature logic is duplicated as both tag groups support it.

In search data and class data export the data for builtin tags is
added to :meta field, so the frontend logic can stay the same.

On the good side, @private no more needs to be duplicated in both
member[:private] and member[:meta][:private] - just the former will do.
Turn @protected into builtin Tag class.

In so doing we need to also copy over the :protected property when
doing inheriting and expansion of accessors.
Turn @ignore into builtin Tag class.
Turn @abstract into builtin Tag class.
Turn @readonly into builtin Tag class.
Turn @chainable into builtin Tag class.
Remove needless #process_doc from @protected & @chainable.

Both get inherited from BooleanTag.
Turn @author & @docauthor into builtin Tag classes.
Turn @template into builtin Tag class.

As the @template generates custom HTML, the Tag classes can now have
a #to_html method and @html_position attribute.
Turn @preventable into builtin tag class.
Turn (required) into builtin Tag class.
Turn @deprecated into builtin Tag class.

Implement @multiline property in base Tag class and use it in @deprecated
to consume the multiline docs after @deprecated.
Pass context directly to Tag#to_html method.

Instead of passing the value of current tag and then separately setting
the @context variable, we now just pass the context from which the
tag implementation needs to extract its value by itself.
Implement Tag#format method like in old meta tags.

This way the to_html only needs to take one parameter and the
formatter can be passed to tags only once, when starting the
HTML generation, instead of passing it every time when invoking
the #to_html method.
Fix crash in #to_html of @deprected tag.