Shanghai hit by Covid-19 protests as anger spreads across China