gui2/tprogress_bar: Limit set_percentage() argument to 100 (bug #20893)

This makes it so the set_percentage() argument is limited to
unsigned(100) instead of having an assertion check fail when it is
greater than 100.

Part of bug #20893.
network: Abort send_file() if the file size is negative (bug #20893)

Sending a file whose size we can't know (because stat() failed) probably
means it is inaccessible. Trying to proceed in this situation leads to a
series of numeric errors described in the first comment to bug #20893.
campaignd: Abort sending if the pack size is negative (bug #20893)

Sending an add-on whose size could not be determined means that the pack
in which it is stored is inaccessible in some way. Proceeding in this
situation, with the network::send_file() fix for the same condition,
results in the built-in add-ons client stalling forever waiting for
campaignd to send data to it, so we must respond with an [error] tag
instead.

This is the final step in fixing bug #20893.