Ofcom has fined Virgin Media a record £28 million for preventing or delaying customers from switching to another provider.