BF: Handle case of all default metadata

can now start exp. with hdf5 saving , even if none of the exp. or
session meta data is  provided.
BF: eye tracker validation plot image

Is now saved in the directory specified with the "save_figure" kwarg of
the ValidationProcedure class. By default, this arg is None, which
results in the image being saved in the same folder as the script being
run.
BF: smi tracker.getEvents() working again
BF: (re) implemented SMI ConfigureFilter

Did it April 4th, but commit must have failed or something, as the
original change was never logged as a commit to github. ;( ??
BF: EyeTracker Validation crash

if no data could be collected for any validate point, the analysis was
crashing.
Merge branch 'master' of git://github.com/psychopy/psychopy
ADD: iohub Serial Device

Intended to be used for general purpose access to data received on a
serial port. The serial rx stream can be split into serial events by
specifying values for prefix, delimiter, and / or fixed_width
configuration options.
ENH: Added PST box support to ioHub Serial

See coder/iohub/serial/pstbox.py demo for an example.
Fixed handling of 'QUEST' v 'quest' from builder

Builder seems to create multi stair with type ‘QUEST’ but the code
throughout exp.py and data.py like ‘quest’ instead. Changed to accept
both in hopes of keeping some form of backward / forward compatibility.
Merge pull request #564 from flipphillips/master

Fixed handling of 'QUEST' v 'quest' from builder
Merge pull request #565 from isolver/master

BF and ENH: ioHub related
ENH: getKeys timeStamped arg can now be a float

If a user wants the times returned by getkeys() to be relative to an
other time,  timeStamped  can be passed with a float or int as the
object type. In this case, the timeStamped  value is simply subtracted
from key times.

This allows for functionality like when using a clock and reseting it
when the flip occurs. However I find this simpler, and with less
overhead than using Clocks in many cases. It is also more accurate, as
the time right after the flip blocking code returns is used, so the flip
time is immune to the time it takes to run and code in win.flip()
following the actual flip time.
Depending on the time it takes to run any functions have been set to run
after the flip, this time difference could be biog enough to care about.

Ex:

flip_time=win.flip()
# do stuff
# ...
# get keys relative to the flip time
keyevents=event.getKeys(timeStamped=flip_time)
BF: getKeys isinstance was eval True to be an int

So if timeStamped=True in getKeys, events were being returned with the
time-1. Oops.

Now fixed for elif True: is checked before isinstance for float, int,
ENH: Added USB Keyboard mode support to ioSync

There is now a python method in the iosync interface that allows your
program to have the iosync hardware generate a keyboard press and
release event which are sent to the computer via the USB cable.

The duration of the keypress can be set as a param in the command
method.

The keypress event occurs in realtime with < 1 msec of uncertainty about
the time that the HID keyboard event packet was sent to the OS via USB.

To use this new feature, the ioSync.ino teensy 3 program must be
compiled with Serial set to Serial + Keyboard.

When the ioSync is connected to the computer, it will appear as a
generic USB keyboard to the OS ( it should be listed in the keyboard
section of your device manager).

The idea is that this should be able to be used to look at the software
only differences between OSs and libraries being used, as the key event
time is know precisely and in the same time base  used for key events
received by psychopy or iohub.
Merge pull request #566 from isolver/master

ENH: getKeys timeStamped arg can now be a float
Merge pull request #563 from jeremygray/master

pylint-based style changes, esp in info, data, microphone, builder
BF: pyglet shaders were not respecting opacity values for image stimuli