Actually, on looking deeper it appears that cloudfront does NOT support dynamic gzipping.
So unfortunately, cloudflare would be your only option.
Also, google's pagespeed service (in beta) is also an option. Also free, so that's good :D
EDIT: Okay, wrong again. Appears that cloudfront will serve dynamically gzipped content if your origin server responds with gzipped content to the Accept-Encoding header. So origin server = S3 is not a good idea, but origin through your own web server should work fine.