Better error handling for peer connection failures

NOTE: this builds on pull requests #52 #53

 * Enables peer-connections to be debugged from the core runtime environment.
 * Improves error catching/handling 
   * data channel send can fail if the remote side closes the data channel while we try to send) 
   * data channels might be removed; so a freedom peer connection send needs to check the channel exists first.