Support singleton instances
Revert to namedtuple over dataclass for python 3.6 This means we can't use the registration to cache the resolution result any more so instead we just introduce a new 'singletons' property on the Container itself, which is nice and simple I guess.