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