ENH: Updated iohub demo folder structure

+ added / cleaned up ioSync demos
BF: Window wasn't beign garbage-collected due to circular reference with pyglet on_resize
BF: removed imports of module (textbox.fontStore)

the module does not exist anymore.
BF and DOC : StairHandler using wrong stepSizes

BF : StairHandler was using the wrong stepSizes after a reversal : it applied the intensity increase/decrease BEFORE changing the step. This always made the first intensity change (after a reversal) use the former step.

DOC : updated comments about the StairHandler to include the fact that nUp and nDown are always considered as 1 until the first reversal is reached.
BF : Microphone, and non-english Windows

The problem here was that if there was a Unicode error, the _bestDriver method would just return None, None and leave it to that (so the pyo object could not be created). The problem would have been the same if the user entered wrong driver names in the PsychoPy preferences.

With this simple new code, the _bestDriver method checks for the drivers written in the preferences, and uses the default one if none is found or an Unicode warning is thrown.

Even if this solution works, I don't know if the pyo.pa_get_default_* methods return None on error (this isn't written in PYO documentation). It should be checked if possible, to change the following inputID test accordingly if necessary.
RF: use multiple inheritance for BaseVisualStim

same function, better code structure
BF : Unicode warnings and errors in microphone

I've found what the Unicode problem was (I believe).

devString is already encoded by the OS character encoding, so trying to encode it again results in an error. We must first decode it, and then re-encode it in utf-8 to compare with the utf-8 encoded prefDriver. The problem was to make the code compatible with multiple versions of Windows that may not be using the same character encoding.

sys.getfilesystemencoding() should do the trick, but I need someone to test it at least on an english windows version, and it would be great to test it on others too. On my french version, it's working fine and no warnings are being thrown anymore.

Plus I added a .lower() to make it non case-sensitive.
Fix : wrong inputID test

There was another "if inputID" instead of "if inputID is not None"
BF: Raise exception if freetype dll is not found
ioHub Docs update
updated iohub version
BF: removed unwanted commented out code
FF: aperture.contains() now working

plus:
- simplify the shape logic
- log error if unknown shape
- default size=1
- some testing of shape options

Conflicts:

	psychopy/visual/aperture.py
	psychopy/visual/basevisual.py
FF: Window.bitsMode isn't always defined now, but Window.bits should be
BF: fix pos in convertToPix call from .contains()

Good if someone else could double check that this is the right fix.
ADD: Graphics and control logic for ET validation

A Validation wrapper is not yet done, but the core classes that will be
used to support an eye tracker independent validation process is now in
place.

Could also use same code for eye tracker calibration on systems that use
psychopy graphics for calibration stim.

See the 'validation.py' demo in demos.coder.iohub.eyetracker for an
example
of how the new classes will be used to create a packaged validation
process method call for the iohub eye tracker device.

TODO:
- Calculate and display validation accuracy
- Add starting intro / menu screen and validation complete type msg
screen.
BF: sound tries note names before files; closes #543
ENH: More work on eye tracker validation graphics

Now displays results at end.
Only will work with Tobii system as the missing sample filter is tibii
specific right now. ;( Will fix tomorrow.
BF: Eyetracker missing data handled uniformly

SMI, EyeLink, Tobii and LC Tech all now use the same values in the cause
of missing sample data for gaze position fields, pupil size, and status
field:

If sample IS fine, status is == 0 now for all eye trackers.

If sample is missing data:

For monocular:

gaze_x = EyeTrackerConstants.UNDEFINED
gaze_y = EyeTrackerConstants.UNDEFINED
pupil size = 0
status = 2

For binocular:

for left:
left_gaze_x = EyeTrackerConstants.UNDEFINED
left_gaze_y = EyeTrackerConstants.UNDEFINED
left_pupil size = 0
status = 20

for right:
right_gaze_x = EyeTrackerConstants.UNDEFINED
right_gaze_y = EyeTrackerConstants.UNDEFINED
right_pupil size = 0
status += 2
status field used to filter for all et models