Fix validations of name uniqueness

ModelDefinition.name and DatasourceDefinition.name are validated
for uniqueness within the project only.

Add missing domain object properties:
  ModelDefinition.name
  DatasourceDefinition.name

Add "required" flag to the definition of properties validated
for presence:
  ModelDefinition.dataSource
  DatasourceDefinition.connector

Upgrade loopback-datasource-juggler to "^1.5", as the scoped uniqueness
validator was added in 1.5.0.
Use app.boot() to setup models.

Move the definition of models to `models.json`.

The definition of the default `db` datasource is kept in the main app.js
file for now, as we may want to make it dynamic in the future.
fix typo in jsdoc type annotation
Fix Project.fromConfig to save the object created

Fix `Project.fromConfig` to call `Project.create` instead
of `new Project`. That way:

 - The related entities (model definitions, datasource definitions)
   have correct projectId. Before this change, the related entities
   were not linked to the project.

 - Model validations are executed for the created Project instance.

Rename `Project.fromConfig` to `Project.createFromConfig` to make
the intent of the method more clear.

Fix the bug in `loadConfigFilesWithExt` revelated by this change,
where the project name was not set.
Remove the uniqueness constraint from Project name

The uniqueness constraint prevents the consumers to load the same
project (the project in the same directory) multiple times.

This commit also moves the definition & constraints of the `name`
property to models.json.
Implement ModelPropertyDefinition model.

Implement domain entity for working with model properties.

Refactory Project and ModelDefinition to use this new entity when
loading and saving `models.json`.