While working on ingest and especially gen2convert, I've found it frustrating to need to pass a collection/run to Butler at construction, rather than later, when calling get/put/ingest. We often need an object that represents the combination of a Registry and a Datastore without specifying a collection/run.
I think we should add optional "run" kwargs to all Butler write operations and "collection" kwargs to all read operations, and make the corresponding construction arguments an optional way to provide defaults for these.
As a side note, I think I'd like to eventually move to having Butler support lookup with ordered sequence of collections rather than just a single one. We could anticipate that by making the new kwargs for read operations a "collections" sequence rather than than a "collection" scalar, even if we don't implement support for more than one yet, but I'm also willing to defer that for later.