Maple, 233 bytes
##Maple, 233 bytes AddedAdded (unnecessary) newlines for code readability:
seq(printf("%d %s of beer on the wall,\n%d %s of beer.\nTake one down, pass it around,\n%d %s of beer on the wall.\n\n",
i,`if`(i<>1,"bottles","bottle"),
i,`if`(i<>1,"bottles","bottle"),
i-1,`if`(i-1<>1,"bottles","bottle")),
i=99..1,-1);