title: Getting the project base path in a yeoman generator
body: <p>I have updated the yeoman generator dependency from 0.18.10 to 0.20.3.
  I have updated the deprecated <code>this.dest</code> to <code>this.destinationRoot()</code></p>
  
  <p>I am now having issues with the generator when it comes to getting the base path of the project, so that I can copy files from one location to another.
  I have created a function to put the paths together, this then passes to another function which excludes some files from being copied over.</p>
  
  <p>Here is the function I getting the error with</p>
  
  <pre><code>// Copy Bower files to another directory
  var copyBowerFiles = function (component, to, exclude) {
    var base = this.destinationRoot(),
        publicDir = base + '/' + this.publicDir,
        publicAssetsDir = publicDir + '/assets',
        bowerComponentsDir = publicAssetsDir + '/bower_components',
        bower,
        from;
  
    to = (base + '/' + to || publicAssetsDir);
    from = bowerComponentsDir + '/' + component;
  
    //this.dest.copy(from, to);
    this.bulkDirectory(from, copyDestPathPartial.call(this, to, exclude));
  };
  </code></pre>
  
  <p>This is being called in the end function:</p>
  
  <pre><code>end: function () {
      this.installDependencies({
          callback: function () {
              copyBowerFiles.call('jam', this.publicDir, excludeJamFiles);
          }.bind(this)
      });
  }
  </code></pre>
  
  <p>I get the error message:</p>
  
  <pre><code>var base = this.destinationRoot(),
                  ^
  TypeError: undefined is not a function
  </code></pre>
  
  <p>I have also tried sourceRoot()</p>
  
  <p>I would like to update my generator to work with the latest version of the generator. Any help getting this working would be great.</p>
  
  <p>Also do you still have to pass <code>this</code> as the first parameter when calling a function?</p>
  
  <p><strong>EDIT:</strong>
  Here is the copyDestPathPartial function</p>
  
  <pre><code>// Copy destination path partial
  var copyDestPathPartial = function (to, exclude) {
    exclude = exclude || [];
  
    return function (abs, root, sub, file) {
      if (!_.contains(exclude, file) &amp;&amp; ! _.contains(exclude, sub)) {
        this.copy(abs, to + '/' + (sub || '') + '/' + file);
      }
    }.bind(this.destinationRoot());
  };
  </code></pre>
  
  <p>When I use <code>this</code> in the copyBowerFiles function I get another error message which says when I call this function:</p>
  
  <pre><code>throw new TypeError('Arguments to path.resolve must be strings');
  </code></pre>
  
  <p>Is the <code>copyDestPathPartial</code> function not outputting a string?</p>