[5.0] Replace bindShared() with singleton() in service providers

Since service providers have access to an instance of the container *contract*, we should use the method from the contract. This also seems to be the preferred way of binding shared instances anyway (and Taylor does not want to add `bindShared()` to the contract), so we might as well use the preferred way throughout the framework.