Feat/conforming behavior

Note: This is a major change.

### Goals
* make plugin respect file.base and thereby file.relative as set by gulp.src (based on location of globs). Currently, plugin calculates its own definition of the relative path, making it very difficult to implement renames to the filepath.
* make extension parsing conform with standard node modules. e.g. Path.extname('hello.v1.2.3.txt') === '.txt' not '.v1.2.3.txt'.
* make basename parsing conform with standard node modules. e.g. Path.basename('hello.v1.2.3.txt', Path.extname('hello.v1.2.3.txt')) === 'hello.v1.2.3' not 'hello'.
* organize and enhance test suite to better describe behavior and capture potential regressions.

### BREAKING CHANGES
* string parameter which includes path are relative to the base directory set by gulp.src instead of relative to the parent directory of the file.
* hash parameter has changed.
  * dirname key has been added to support changing the relative directory of the file.
  * basename key has been added and conforms to Path.basename(file, Path.extname(file)) behavior.
  * ext key is now 'extname' and conforms to Path.extname behavior.
* function parameter argument has changed. Argument is now a single object with values intended to be modified.
  * dirname - the relative path to the file.
  * basename - the filename with the extension removed.
  * extname - the extension including '.'.
  * callback is no longer responsible for joining the parts.