Upgrade 

Other than Unicode and assuming you are not heavily relying on a discontinued feature then it should not be very difficult.  There is a Migration Guide to assist you with identifying key issues to consider: /support/documents/appeon_online_help/pb2017r3/migrating_pb_apps/index.html.
PFC was released to open source back in the PowerBuilder 10 days.  The latest version can be found at https://github.com/OpenSourcePFCLibraries​
C# development is a feature in the Cloud Edition of PowerBuilder for developing cloud apps.

SVN & Git

Yes, both SVN and Git are open source.
Yes.  That was introduced in R2, but there are enhancements in R3.  You will still need to use TortoiseSVN/TortoiseGit to do show log and them or another tool for show diff.
PBG is still available when you use the legacy MSSCCI API.  Only when interfacing with Git and SVN there are no more PBGs.  
No, and we wouldn't recommend it.  We suggest creating a new repository and keeping the old one available for historical purposes.  Here is a real customer case.  They migrated from PVCS to SVN and they did a lot of work to migrate over the history, and then they rarely if ever made any use of it.
Yes, you would need the Tortoise client for the advanced features like branching and merging.

REST & JSON

Yes, due to design differences it should be much better.  But we don't have benchmarks to provide you.
This feature can hardly be implemented because PowerBuilder is still single-threaded.  We've recorded this as an enhancement request and keep looking for a possible solution.  However, you can use the timeout settings to ensure a REST request gets cancelled if the server is not responding.
Yes, both SVN and Git are open source.
We do not have the plan to export DW formatting specs as part of JSON export functionality yet.  
There are two possible ways: (1)You may either use a third party tool/solution to convert the XML to JSON, or  (2) first use PBDOM to parse the XML, and then use the JSONGenerator provided in PB 2017 R3 to generate JSON.
This is the main difference between SetFullState and ImportJSON.  SetFullState can apply content to a DataWindow without DataWindow syntax; ImportJSON can only apply content to DataWindows that already have DataWindow creation syntax.