Add the ability to specify the shell to use.
Print a message to the console or /tmp when sent a SIGUSR1

This will print a stacktrace of the currently running code when any
of the salt-minion or salt-master processes are sent a SIGUSR1 signal.
This is for seeing what's going on and to help with debugging.

Minion example:
======== Salt Debug Stack Trace =========
  File "/home/jeff/git/salt/scripts/salt-minion", line 18, in <module>
    main()
  File "/home/jeff/git/salt/scripts/salt-minion", line 15, in main
    minion.start()
  File "/home/jeff/git/salt/salt/__init__.py", line 202, in start
    minion.tune_in()
  File "/home/jeff/git/salt/salt/minion.py", line 510, in tune_in
    time.sleep(0.05)
=========================================

Master watchdog process example:
======== Salt Debug Stack Trace =========
  File "/home/jeff/git/salt/scripts/salt-master", line 17, in <module>
    main()
  File "/home/jeff/git/salt/scripts/salt-master", line 14, in main
    master.start()
  File "/home/jeff/git/salt/salt/__init__.py", line 110, in start
    master.start()
  File "/home/jeff/git/salt/salt/master.py", line 192, in start
    reqserv.run()
  File "/home/jeff/git/salt/salt/master.py", line 304, in run
    self.__bind()
  File "/home/jeff/git/salt/salt/master.py", line 286, in __bind
    zmq.device(zmq.QUEUE, self.clients, self.workers)
=========================================

Master worker example:
======== Salt Debug Stack Trace =========
  File "/home/jeff/git/salt/scripts/salt-master", line 17, in <module>
    main()
  File "/home/jeff/git/salt/scripts/salt-master", line 14, in main
    master.start()
  File "/home/jeff/git/salt/salt/__init__.py", line 110, in start
    master.start()
  File "/home/jeff/git/salt/salt/master.py", line 158, in start
    clear_old_jobs_proc.start()
  File "/usr/lib/python2.6/multiprocessing/process.py", line 104, in start
    self._popen = Popen(self)
  File "/usr/lib/python2.6/multiprocessing/forking.py", line 99, in __init__
    code = process_obj._bootstrap()
  File "/usr/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap
    self.run()
  File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run
    self._target(*self._args, **self._kwargs)
  File "/home/jeff/git/salt/salt/master.py", line 145, in _clear_old_jobs
    time.sleep(60)
=========================================

I'm sure there are places missed as this needs a *lot* more testing,
but for the moment, it "works for me TM"
Remove a few instances of hardcoded /tmp in code

tempfile.gettempdir() is way better. The gem and rvm states are
still failing, but only because they require the "mock" python
module for running their tests.
Properly use os.path.join in some integration tests
DRY with the grains integration tests
Cleaning up the publish module integration tests a bit
Add shell selection to cmd.run.wait
Add shell checking to cmdmod since shell can be defined.
Remove redundant checking (DRY)
Make the errors return the right way.
Add a no replace option for file.managed state
Fix changing error into string.
Remove env from wait.
Add a grain to provide the shell

I'm not sure how this would end up working on Windows.
Fixed MAC address handling in FreeBSD
Check for transparent objects in file finder, fix # 1236
Fix #1238
Merge pull request #1241 from SEJeff/handle-sigusr1

Print a message to the console or /tmp when sent a SIGUSR1
Merge pull request #1243 from jhutchins/choose_shell

Choose shell
cast to a string