Fix uniqueness validations and implement model-property-definition API

Leverage strongloop/loopback-datasource-juggle#110 to scope unique names to project/model only. Drop the uniqueness constraint from `Project.name`

Replace the free-form `Model.properties` object with a proper domain entity - `ModelPropertyDefinition`.

**Breaking changes**

 - `model.properties` is no longer a JSON-like object, API consumers has to use DAO methods instead, e.g.

  ```
  // query
  model.properties({ where: { name: 'login' } }, cb)
  // create
  model.properties.create({name: 'login'}, cb)
  ```

- Properties defined using the short form

  ```
  login: "string"
  ```

  are expanded to the long form during load & save roundtrip:

  ```
  login: { type: "string" }
  ```

/to @ritch please review
/cc @seanbrookes