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.
I'm not a big fan of throwing exceptions. It's only an unimplemented function after all, not a fatal error, we can and should recover. Ideally you'll have a compilation error there such as an unimplemented virtual function. But we can't, so potentially something broken /can/ be delivered to a user.

How about we have a `console.log` there notifying the developer? Developers will notice, users wouldn't?