Remove redundant FormalArg.asArg field
Properly clone FormalArg.asArg
Documenting asserts
Use vector of PVData instead of pair of vectors

Because PVData is exactly a pair of `type` and `isRValue`.
Extract duplicate code into a function