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.
There's no native support for annotations in Javascript AFAIK. If we want to do that we'd probably need to use some of convention with comments, I think.

Out of interest: IntelliJ identifies that these functions override other functions and labels them accordingly.