Interfaces for (nearly) everything

As mentioned in PR #10, I had some issues with interfaces: some classes don't depend on interfaces that implement all methods that they require. For instance, ProfileManager can be instantiated with a class that does not implement the `createProfile` method.

This means that:
* for client bundles that override classes defined by this bundle, there will be no up-front list of methods that must be defined, and,
* the bundle itself might rely on a method that does not exist and it is not found until the code is actually run (we've seen this recently with `saveProfile`/`updateProfile`, I recall).

This PR adds interfaces for all classes in the Model directory and also for the User entity.