sml: remove weak associations if a regular association is present

- ensure that if we have a regular association for a given type t, we
  drop any weak associations to t we may have
- add tests for new functionality
- fix existing tests that had both a shared pointer to t and a member
  variable of type t, as we did not intend to test this new feature on
  those tests. update mock model factory to do the right thing for
  these cases.
- rename variables that were named pa to wa (fallout of the pointer association to
  weak association rename)