public static function start($options)
    {
        ErrorHandler::register();
        ExceptionHandler::register();

        // Default params
        $defaultTemplateClass = 'Rareloop\Primer\TemplateEngine\Handlebars\Template';

        // Work out what we were passed as an argument
        if (is_string($options)) {
            // Backwards compatibility
            Primer::$BASE_PATH      = realpath($options);
            Primer::$PATTERN_PATH   = Primer::$BASE_PATH . '/patterns';
            Primer::$PATTERN_PATH   = Primer::$BASE_PATH . '/views';
            Primer::$CACHE_PATH     = Primer::$BASE_PATH . '/cache';
            Primer::$TEMPLATE_CLASS = $defaultTemplateClass;
            Primer::$WRAP_TEMPLATES = true;
        } else {
            // New more expressive function params
            if (!isset($options['basePath'])) {
                throw new Exception('No `basePath` param passed to Primer::start()');
            }

            Primer::$BASE_PATH      = realpath($options['basePath']);

            Primer::$PATTERN_PATH   = isset($options['patternPath'])    ? realpath($options['patternPath'])     : Primer::$BASE_PATH . '/patterns';
            Primer::$VIEW_PATH      = isset($options['viewPath'])       ? realpath($options['viewPath'])        : Primer::$BASE_PATH . '/views';
            Primer::$CACHE_PATH     = isset($options['cachePath'])      ? realpath($options['cachePath'])       : Primer::$BASE_PATH . '/cache';
            Primer::$TEMPLATE_CLASS = isset($options['templateClass'])  ? $options['templateClass']             : $defaultTemplateClass;

            Primer::$WRAP_TEMPLATES = isset($options['wrapTemplate'])   ? $options['wrapTemplate']              : true;
        }

        // Attempt to load all `init.php` files. We shouldn't really have to do this here but currently
        // include functions don't actually load patterns so its hard to track when things are loaded
        // TODO: Move everything through Pattern constructors
        $finder = new Finder();
        $initFiles = $finder->in(Primer::$PATTERN_PATH)->files()->name('init.php');

        foreach ($initFiles as $file) {
            include_once($file);
        }

        return Primer::instance();
    }