Dataframe extension integration

From our quick discussion the other day, I thought we settled on keeping a single `download` method (rather than two: `download` and `download_parts`), as this is complexity that we wouldn't want to expose to the user. If it is helpful for implementation purposes to keep this one, we could make it private and also simply delegate to it from the other method when the downloaded path is a vanilla file.