function bundle( files, dest, clbk ) {
	var opts;
	var out;
	var cb;
	var b;

	if ( !isStringArray( files ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be an array of strings. Value: `%s`.', files ) );
	}
	if ( arguments.length < 3 ) {
		cb = dest;
	} else {
		if ( !isString( dest ) ) {
			throw new TypeError( format( 'invalid argument. Second argument must be a string. Value: `%s`.', dest ) );
		}
		out = dest;
		cb = clbk;
	}
	if ( !isFunction( cb ) ) {
		throw new TypeError( format( 'invalid argument. Last argument must be a function. Value: `%s`.', cb ) );
	}
	opts = {
		'transform': [ 'envify' ],
		'plugin': [ 'proxyquire-universal' ]
	};
	debug( 'Browserify options: %s', JSON.stringify( opts ) );

	b = browserify( files, opts );

	debug( 'Creating a bundle...' );
	b.bundle( onBundle );

	/**
	* Callback invoked upon creating a bundle.
	*
	* @private
	* @param {(Error|null)} error - error object
	* @param {Buffer} bundle - bundle
	* @returns {void}
	*/
	function onBundle( error, bundle ) {
		var opts;
		if ( error ) {
			debug( 'Encountered an error when creating a bundle: %s', error.message );
			return cb( error );
		}
		debug( 'Successfully created a bundle.' );
		if ( out === void 0 ) {
			return cb( null, bundle );
		}
		debug( 'Writing bundle to file...' );
		opts = {
			'encoding': 'utf8'
		};
		writeFile( out, bundle, opts, onWrite );
	}

	/**
	* Callback invoked upon writing a file.
	*
	* @private
	* @param {(Error|null)} error - error object
	* @returns {void}
	*/
	function onWrite( error ) {
		if ( error ) {
			debug( 'Encountered an error when writing bundle to file: %s', error.message );
			return cb( error );
		}
		debug( 'Successfully wrote bundle to file.' );
		cb();
	}
}
Bundles files into a single file using `browserify`.

@param {StringArray} files - files to bundle
@param {string} [dest] - output file path
@param {Callback} clbk - callback to invoke after creating a bundle
@throws {TypeError} first argument must be an array of strings
@throws {TypeError} the output file path must be a string
@throws {TypeError} last argument must be a function

@example
var files = [ '/foo/bar.js', '/beep/boop.js' ];

bundle( files, clbk );

function clbk( error, bundle ) {
    if ( error ) {
        throw error;
    }
    console.log( bundle.toString() );
}