Public / Private definition visibility

Adds a public attribute to definitions, causing private definitions to be unavailable during normal `container.find` and `container.get` calls, but available as service dependencies.

Addresses #2