HISTORY:

  2.2.0:
    - added a private munged version of Open3::open3.  the builtin one causes
      the child process to become a child of init, this was very inconvenient
      because it was sometimes hard to crawl proces trees - the parent was lost.
      now the seesion is a child process that has been detached using
      Process::detach.  this results in less suprising behaviour; for instance
      sending signal TERM to a process results in any sessions it had open dying
      as well.  you can use Session::use_open3=true or
      ENV['SESSION_USE_OPEN3']='1' for the old behaviour if you need it.
    - added Session::Bash::Login class.  this class opens a session which has
      all the normal settings of a bash loging shell (.bashrc is sourced).  this
      if often convenient as paths, aliases, etc. are set as normal.
    - moved the Spawn module inside the Session module.  now the Session module
      is the namespace for everything so using session pollutes namespace less.

  2.1.9:
    - fixed bug where setting track history after creation caused later failure in
      execute (@history =[] only in ctor).  thanks leon breedt
      <bitserf@gmail.com>!
    - updates to README
    - included session-x.x.x.rpa file - thanks batsman <batsman.geo@yahoo.com>
    - to_str/to_s/to_yaml for History/Command is now valid yaml (updated samples
      to reflect this)
    - inspect for History/Command is now ruby's default 

  2.1.8:
    - greatly simplified read loop using two reader threads, one for stderr and
      one for stdout alongside a mutex to protect data.  this streamlined the code
      alot vs. the old select method including allowing removal of the linbuffer
      class.  the interface remains exactly as before however.

  2.1.7:
    - improved thread safe non-blocking read method
    - gemspec 

  2.1.6:
    - wrapped send_command in a Thread (send async) so output processing can
      commend immeadiately.  this was o.k. before, but had strange behaviour when
      using popen3 from threads.  thanks to tanaka akira for this suggestion.
    - iff ENV['SESSION_USE_SPAWN'] is set Session uses Spawn::spawn instead of
      Open3::popen3.  also noted that spawn seems to be a bit faster.
    - added tests for threads.
    - run 'sh SESSION_USE_SPAWN=1 ruby test/session.rb' to test using spawn
    - added test for idl so it's test is not run if system doesn't have it, all
      that should be required for 'ruby test/session.rb' is should be sh'
    - removed sample/tcsh and note about Tcsh and Csh in README - stderr
      redirection/separation is flaky in those shells

  2.1.5:
    - added Session.use_spawn=, AbstractSession.use_spawn=, and an :use_session=>
      option to AbstractSession#initialize.  if any of them are set the code uses
      Spawn::spawn to create external processes instead of Open3::popen3.
      Spawn::spawn uses named pipes (fifos) for IPC instead of forking and pipes.
      the fork used in popen3 can cause strange behaviour with multi-threaded apps
      (like a tk app).  see source for details

  2.1.4:
    - added Thread.exclusive{} wrapper when io is read to works in multi
      threaded apps
