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
don't fail if seeking input is not permitted; add test
use implicit method rescue block in cli; cleanup interrupt handling

- use implicit rescue block for method in cli classes
- exit cleanly when process receives interrupt
- minor cleanups
cloning of options & attributes is now handled in main APIs

- don't clone options/attributes in cli
- test to ensure options/attributes aren't modified when processing multiple files
fix behavior of AbstractNode#set_attr, add test
remove obsolete get_binding method
enhance preprocessor test to ensure attribute assignment works
add .yardopts file for rubydoc.info
resolves #907 write to file by default if input is file

- write to file by default if input is file
- use to_file option to control whether file is written instead of in_place
- prevent input file from being overwritten
Merge pull request #910 from mojavelinux/issue-907

resolves #907 write to file by default if input is file
resolves #903 ignore case of attribute in conditional directives
Merge pull request #911 from mojavelinux/issue-903

resolves #903 ignore case of attribute in conditional directives