Added compatibility for NET40 in both the PCL and a separate NET40 project

See the changes in the files. It was actually quite simple to accomplish, only 2 "pain" points:

1) Task.Run does not exist, use Task.Factory.StartNew instead
2) TypeInfo reflection is not required in NET40