Do not allow overwriting of controllers proxy properties

It was possible to accidentally set the value of `controllers.foo`, where
foo is a container-retrieved controller value as specified using `needs`.

There is no case where a developer would want to do this on purpose, and
it can cause confusion. This commit throws an error when this occurs.
Merge pull request #3871 from lukemelia/read-only-needs

Do not allow overwriting of controllers proxy properties