Constructor accepts a document (as a string) and a path from which to
include external dependencies (stylesheets, scripts, etc)

@param {string} document The input document
@param {!Object} options Optional settings object to overwrite the options
listed in the cleaver document
@param {!string} includePath Optional resource path (default: '.')
@constructor
function Cleaver(document, options, includePath) {
  this.document = document.toString();
  this.options = clone(options) || {};
  this.path = path.resolve(includePath || '.');

  if (!debugInited) {
    if (this.options.debug) {
      debug.enable('*');
    }
    debug = debug('cleaver');
    debugInited = true;
  }

  /**
   * Require helper using `this.path` as a context for where to locate any
   * specified assets
   */
  helper = require('./helper')(this.path, this.options.debug);

  this.templates = {
    layout: 'templates/layout.mustache',
    author: 'templates/author.mustache',
    slides: 'templates/default.mustache'
  };

  this.resources = {
    style: 'resources/default.css',
    githubStyle: 'resources/github.css',
    script: 'resources/script.js'
  };

  this.external = {
    style: []
  };

  this.slides = [];
  this.override = false;

  marked.setOptions({
    gfm: true,
    highlight: function (code, lang) {
      try {
        return hljs.highlight(lang, code).value;
      } catch (e) {
        return code;
      }
    }
  });
}