Download estimator uses metadata

Ready for review.

I think (hope) the commits should each be quite clear. So if you go through them in order it shouldn't be too difficult to see what is going on. And feel free to ask if there's something that you don't understand.
If this function is not implemented as expected then it does break the app (ie. it doesn't fail "silently"). It was a good thought, @danfruehauf.

However, I think I will leave it as it is (throwing an error, rather than returning a value which will fail silently). Because if the developer tries to run their code (just once) then they will find out they've messed-up. If we make it fail-safe then the developer might stop the download estimator from working but have no idea because it will fail silently.