We're already using 'StorageInterface' as type annotation where we expect an object
that implements the same methods, but it isn't technically correct since these
objects aren't an instance of a subclass.
Making StorageInterface a protocol reflects how we already use it, without
lying to mypy.