use aqua tail cause if you decide to change your mind then you can actually delete the move and use waterfall and also aqua tail is more powerful. For waterfall just get a water pokemon to teach surf, whirlpool, waterfall and etc... It's not worth teaching your gyarados and HM move, cause you can never delete it... then you'll regret it later, trust me,
P.S. Gyarados can learn good moves after lvl 50... You'll get more TM's that you might want to teach to it later. And if you teach it an HM then your wasting a slot.
Go with waterfall. Why? Well it may only be 10 less accuracy but that can matter. Most likely if you use waterfall there will come many moments where it misses and you want to just throw your ds across the room. I avoid that frustration by simply using a little weaker move where that will almost never happen.
Also ice fang. Although it sounds excellent in theory to kill off dragon types and to hurt grass types stone edge is a better move. Again there are accuracy problems but if its hits stone edge may just 1hko that salamance just like ice fang. Also there are like 3 grass types used in competitive battling celebi breloom and roserade. Most can take a hit or even 2 from a weak 65 power ice attack especially celebi which will just laugh at your futile attempts. And ice's ground type power is completely over rules by water. While rock hits hard again flying ice bug and fire. And all except bug can be very useful and more powerful.
Definitely Waterfall. Aqua Tail does have more power and the same accuracy, but my experience shows that its accuracy is more like 70-80. Plus Waterfall is an HM so it's useful outside of battle. After Level 50 Gyarados doesnt learn many useful moves, so it wont matter that its an HM