* Write some code to allow more than one modem opened at a time.
  A solution may be a linked list of mdmopendevice's where every
  struct modems contain the fd of the related modem entry. It
  should be easy.

* in lock, write low level fn to get lock contents. Allow (conditional
  compilation) different lock styles.

* fd should be put into the data modem structure and returned only to the
  (user) caller. the libmodem functions should return only the error (
  0 if no error, < 0 if error).

* All global vars should be made stack vars for reentrancy (multi-threads)
