Project: support custom name in createFromTemplate

Add an optional `name` parameter to Project.createFromTemplate()
to better support yeoman generator workflow, which does not
require the project name to match the directory name.
Project: support custom fs.writeFile

Modify all Project methods working with files to use `Project.writeFile`
instead of `fs.writeFile`. This allows consumers to provide they custom
function for writing files, e.g. yeoman generator's `this.write`.
Define more schema properties

model-definition
  dataSource: String
  public: Boolean

datasource-definition
  defaultForType: String
  connector: String

The properties are defined in such order that Project.loadFromFiles
followed by Project.saveToFiles will preserve the JSON files created
from templates.
datasource: validate uniqueness of name
Project: toConfig() must not use stale relations

Modify Project.toConfig() to always fetch the related models like model
and datasource definitions from the datastore, bypassing any possibly
stale cached values.

Related: strongloop/loopback#256
integration.test: fix failing test

Update the expected push datasource definition to match the real one.