resolves #778, rewrite converter API; resolves #638, integrate thread_safe gem

- rewrite converter API
- separate built-in converters from template converter
- rename renderer/render to converter/convert
- make converter an extension point (resolves #778)
- base built-in converters on the converter API
- rename template_name property to node_name on AbstractNode
- make block_ prefix on file name of block-level templates optional
- use thread_safe gem for template and converter caches (resolves #638)
- introduce Stylesheets API to manage stylesheets
- move file write logic to Document
- delegate file write logic to converter that implements Writer
- remove compact logic, deprecate related options
- duplicate options and attributes passed to APIs, add tests
- assign doctype / backend attributes correctly when document is loaded, add tests
- report proper error if nil is passed to load_file and convert_file
- use span tag to group kbd combination in html5 backend
- setup toc in preamble if toc attribute is preamble
- Opal compatibility fixes, use built-in HTML5 converter
- make the outline method accessible to all html converters
- document the converter APIs along with some minor cleanups in terminology
- load stylesheets from data directory
- rename ruler block to thematic_break
- add inline? and block? query methods to AbstractNode
- use Timings class to measure and report timings from processor steps
- fix cucumber tests
- upgrade tilt dependency to 2.0.0
- minor optimizations
update styles to reflect change in kbd macro HTML
make document parsing a discrete step, make Reader accessible as property on Document

- pull parsing out of Document#initializer and make it a discrete step
- don't parse Document on creation unless :parse option is true
- make Reader accessible as a read-only property on Document
- rewrite reader tests to use Reader created by Document
- optimize access to instance variables in Document#initializer
- use requested ERB implementation in TemplateConverter, add tests
add pdf & epub to default extensions list, pass backend when creating built-in converters
allow custom converter to set backend info such as outfilesuffix

- add DSL for custom converter to use to set backend info
- add test to ensure outfilesuffix is set properly
Merge pull request #906 from mojavelinux/issue-778

resolves #778, rewrite converter API; resolves #638, integrate thread_safe gem
Convert HTML entities to XML.

Many AsciiDoc documents, including AsciiDoctor's user manual, use HTML named
entities.  However, XML defines only five named entities.  Re-encode most of
the HTML 5 named entities into decimal entities so that they are valid in
XML, HTML 4, and HTML 5.  Except for &apos;, which is not valid HTML 4, do
not re-encode the named XML entities, as the named version is easier to
read.  The tests also expect the named forms.
Place XHTML elements in the correct namespace.

XHTML elements are required to be in a namespace in order to be recognized
as part of XHTML.  Without the namespace declaration, browsers render pages
as a series of XML nodes, which is not very useful.  Add this declaration
for XHTML documents.  Also, adjust the xmldoc_from_string test function to
parse the document as an XML document if an XML namespace declaration is
present.