gs-progress-button: Implement unknown progress handling
This implements unknown progress handling for the progress button by a similar way as the GtkProgressBar does, which is by a "ping pong" of the bar from the left to the right and back, until the progress is known.
It also avoids unnecessary memory allocations in the gs_progress_button_set_progress().