RIFF::WAV::Tag() returns TagUnion

Changed ```RIFF::WAV::Tag()``` to return ```TagUnion*``` instead of ```ID3V2::Tag*```. It was inconsistent with the ```File``` interface due to the backward compatibility.
```TagUnion``` is templatized. ```DoubleTagUnion``` and ```TripleTagUnion``` are defined, and further versions can be added easily if needed.