Who decides how fast commercial aircraft fly: the pilots or ATC?
ATC can assign speeds en-route for separation or in the TMA area for sequencing aircraft onto the approach. Speeds en-route in upper sectors are assigned using Mach numbers:

R: "DLH123, maintain speed Mach .78"


In the TMA area, aircraft are sequenced for an approach and reduced to similar speeds to maintain lateral separation. These restrictions can be paired with conditions, until when the speed needs to be maintained:

R: "BER456, reduce speed 210 knots"
R: "BER456, cleared ILS approach runway 24, 
    maintain 170 knots indicated until outer marker / 5 DME"


Certain approach or arrival charts list maximum speeds for certain turns, marked with MAX 210 KIAS, indicating that this turn should not be flown with more than 210 KIAS to make the radius.

Speed restrictions imposed by ATC need to be maintained until cancelled by the ATC unit:

R: "DLH123, no speed restrictions / resume normal speed"


The pilot however is responsible for ensuring a safe flight and can report that he is unable to follow the instructions due to performance limitations. 

A: "DLH123, unable to comply, indicated airspeed will be 150 knots"


There is also legal considerations when it comes to aircraft speeds, such as general rules for traffic below certain altitudes or in some jurisdictions, only for certain airspace classes (related: What is the speed limit in European Airspace).

The FAA CFR 91.117 says:


  §91.117   Aircraft speed.
  
  (a) Unless otherwise authorized by the Administrator, no person may operate an aircraft below 10,000 feet MSL at an indicated airspeed of more than 250 knots (288 m.p.h.).


The German LuftVO however rules that a speed limit of 250 KIAS below FL100 only applies to VFR and IFR aircraft in airspaces class D,E,F,G and only to VFR aircraft in airspace class C. IFR aircraft in airspace class C do not have a speed limitation.



Regarding the general authority over a flight, see the related question:
Who has the higher authority, the pilot in command or ATC?