As promised, I've written a Greasemonkey script to do this.

On the front page of Winter Bash, you'll see a small box saying "detailed list". Clicking on this begins the loading process, which involves an Ajax call per hat. From there you'll get a nice list of hats, with a list of sites you've unlocked the hat on and a total count.
Features:
- Simple code, should be easy to modify.
- Loading via ajax, with loading percentage shown.
- Works with all hats displayed on the page. If you unlock any "super secret" hats, it should include those too.
- Creative Commons licensed.
This has been tested on Firefox, but may also work on Chrome. If you run into any bugs or have any other ideas, let me know!
Version 1.11 released
- Removed stupid debug text from page that I forgot to remove on release.
Version 1.10 released
- Replaced spans with a table.
- Fixed wrapping issue when a badge was earned on a large numbers of sites (thanks Gilles!)
- Added a trick with text-indent and padding to keep left align relatively neat.
- Added mouse-over highlighting to rows.