PyrMapperPrim: add error handling for null devstructs

check for a null devstruct pointer in the mapper primitive functions.
this would typically indicate that the device has already been freed.

For the functions that are internal to the lang-side implementation the
end-users won't be using, we're returning errFailed, which will dump a
stack trace in sclang.  This will enforce error checking in the
MapperDevice implementation.

The end-user facing functions are a bit more forgiving, issuing a
warning and maybe returning nil.
Mapper.sc: added error messages for end-user MapperDevice methods

in MapperDevice:free, added a try block around the function body to
catch exceptions thrown
PyrMapperPrim: check for null pointer in private MapperSignal methods

This follows the pattern established in MapperDevice:
when the signal's dataptr is null:
 - each method prints an error message
 - the methods that typically return a value will return nil
 - an exception is not raised since this is the end-user API
added MapperSignal:prInvalidate

MapperSignal:prInvalidate sets the signal's dataptr to null to indicate
that the signal has been freed.  It's called internally by MapperDevice
when the device is freed itself, or when a signal is removed.
PyrMapperPrim.cpp: added "pointer" to the error messages for clairty