Python, 245245 223 bytes
wall="bottlesw="bottles of beer on the wall"
[print(i,wall+'w+',',wall[0w[:15]+'.\nTake one down and pass it around,',str(i-1),wall+'w+'.\n')for i in range(99,1,-1)]
print('1 bottle',wall[8w[8:],',1 bottle',wall[8w[8:15]+'.\nGo to the store and buy some more,',99,wallw)
edit: thank you GamrCorps for the suggestion to cut down over 20 bytes!