add `basedir` option to required options param

Without this option, there is no way to educate browserify about
different start paths for modules. If the `process.cwd()` is at the
project root, but the user wants to required from other folders and
their node_modules, they need to be able to specify an alternate
starting 'root'.
add `external` option to require opts param

If external is true, then this require is not bundled but instead will
reference itself in another bundle.

.external api call now just calls .require(id, { external: true });

This means that .require('module-a', { external: true }); now works
without the user having to resolve module-a ahead of time (as was
required by the previous .external api. The reason we want to support
this is because our internal resolve handle browser field and the user
should not have to worry about that. They should just be able to require
things and have it work.
Merge branch 'require-fixes' of git://github.com/shtylman/node-browserify into shtylman-require-fixes
2.2.4