ENH: yet more info in RunTimeInfo

- locale (from OS or user-pref)
- sound devices (input, output), including latencies from portaudio
  (requires pyo as compiled from svn rev 1024+)
- Dropbox added to list of apps to flag
- revert recent addition of haveShaders -- was already being done
DOC: time-by-frames use SE for 99% CI
NF: configuration wizard for app first-run, closes #210

Features:
- detects first-run (= if there's no saved last-run info)
- detects bad drivers
- does RunTimeInfo() plus some performance tests
- detects suboptimal situations, tries to warn, explain, & link to info
- formats report as html page with links to more info / explanation
- can be run from Tools menu at any time
Limitations:
- more performance tests would be good
- second dialog seems too small
- icon in dialogs would be nice
- for first-run, might want to start the app and then do config wizard?
- be more interactive? eg, proxy try to autodetect, manual entry
- not sure I got all the warning explanations right
Not tested:
- what if no built-in microphone, speakers?
BF: configuration wizard

- pyo.pa_get_devices_infos() is done in RunTimeInfo; requires pyo rev1024+

also, so test config wizard, start app from command line with --firstrun
    % python .../psychopy/app/psychopyApp.py --firstrun
or call from Tools menu
DOC: revert time-by-frames
Make opacity and contrast work for all stimuli
- Move setContrast() method to _BaseVisualStim.
- setContrast() method + contrast argument now works for all stimuli using _BaseVisualClass.
- Made opacity work with DotStim. Added opacity argument.
- Update docs on contrast and opacity.
- Added sanity checks to setContrast and setOpacity.
Code simplification and make negative contrasts work
- make negative contrast values work on non-centered colors
- removes 6-fold code duplication
- check that color boundaries are not exceeded for all stimulus types
Fix typo in setContrast()
NF: hardware.getRAM

minimal cross-platform fxn to return total-physical-RAM, available-RAM
useful for:
- benchmark-related testing (don't want to be hitting swap)
- within-experiment tracking of RAM usage (perhaps during ITI)
RF: move getRAM over to info.py

- RunTimeInfo() now does getRAM
- minor ctypes-related clean-up in info._getUserNameUID()
Fix text=None error and apply _getDesiredRGB to ShapeStim
Work on MovieStim and a few bug fixes
- Remove contrast from MovieStim. It only changed luminance.
- Add color to MovieStim to affect color balance
- Fix bug I made in BufferImageStim
- Fix bug I made in ShapeStim when setting color for fillRGB
BF: gui.Dlg now self.Center()'s just before being shown

previously could end up being off-center
ENH: improved first-run ConfigWizard

- more description for user
- initial summary of config findings in a dialog box
- option for viewing html version
- better hook into the app (suppress compatability msg on first-run)
Still not done:
- detection of floating-point-capable gfx card (not sure how to do this)
- to be useful, cardOkay() needs info about known-good and known-bad cards

try from command line: psychopyApp.py --firstrun
BF: remove print statement
ENH: ConfigWizard descriptions; report more in debugMode, less if not

- add check-marks in summary dialog box
- more precise descriptions
- report less & warn less if its a first-run
- if debugMode, show openGL & developer packages (= never on first-run)
BF: contains() returned wrong value in some conditions.
BF: contains() didn't work when two parameters are passed.
RF: configWizard verbosity

- never verbose on first-run (not even an option)
- allow choice of verbosity when running from app menu
BF: info.getRAM for BSD