The easiest solution would be to use get_terms() to get an array of all post_tag terms. Do a foreach loop through the terms array. Within this loop, place Jose’s code. Alter his code to replace the ‘green-eggs-and-ham’ tag argument with the current term name variable within the loop.
You thus have nested loops, an outer term loop and an inner posts loop. This sort of setup isn’t very efficient. If there are a lot of tags, it takes a lot of post queries to complete the request. Despite that, it may likely work fine on your site, so there would be little reason to work up a more efficient solution.
So far, the wineries and breweries are all together. Depending on how you want the list organized, you can differentiate by category as well by adding yet another nested loop and alter Jose’s WP_Query arguments to include the current category argument as well. If you only have a few categories, it may make for a nicer list primarily organized by location if you simply included a particular category icon (grapes or hops?) with each post listing. Then no category loop is required, instead use wp_get_post_categories() to determine what icon to output with the current post.