Use numpy types/views rather than struct [un]pack

Use `numpy` types/views rather than `struct` `pack` and `unpack`
functions to make persistent configuration input/output more explicit.

Fixes #69.
Add reference calibration wizard
Add read_oscope
Use compute_from_transfer_function when plotting
Use min/max frequency from control board config
Add SVG hardware setup image file
Fix GUI freezing when wizard run from MicroDrop

Prior to this commit, GUI was freezing when the reference calibration assistant
was run from the MicroDrop GUI. This commit, seems to fix the problem.  Note
that any code that *might* be called from another thread *(e.g., a `idle_add`
callback)* must be wrapped as follows:

    gtk.gdk.threads_enter()
    ... code ...
    gtk.gdk.threads_leave()

See [here][1] and [here][2].

[1]: http://stackoverflow.com/questions/7850134/pygtk-thread-not-running-until-main-quits
[2]: http://faq.pygtk.org/index.py?req=edit&file=faq20.006.htp
Fix reference calibration...

Only instantiate an `AgilentOscope` when needed.  Otherwise, the control
board can be incorrectly identified as a `VISA` device, preventing the
control board firmware from connecting properly.
Make reference setup diagram smaller
Fix impedance calibration...

- Turn on auto amplifier gain.
- Set waveform voltage to 50V to auto-adjust gain.
- Add debug output print statements to display
the settings for each measurement step.
Fix impedance calibration param fitting

Prior to this commit, we were solving the transfer function for `V2`, assuming
`R1=infinity`.  However, this results in `R1` in both the numerator and
denominator, producing a value of zero regardless of the values of the other
arguments.  As of this commit, we avoid this issue by specifying a *very large*
value for `R1` *(i.e., 10e45)*.

TODO Check with [Ryan][1] if this is OK.

[1]: mailto:ryan@fobel.net
Use sp.limit instead of subs for default R/C...

Use `sp.limit` instead of `subs` method when substituting default `R` and `C`
values in computed transfer functions.

By using `sp.limit`, we avoid issues when, e.g., `R` is given a value of
infinity.  Specifically, this allows us to solve for `V2` when fitting the
impedance measurement parameters.

Other edits
-----------

 - Do not use any `plt.*` functions to plot impedance stats, since this causes
   issues when plotting to a figure on a GTK canvas.
  * Specifically, although the plots are drawn appropriately on the GTK canvas,
    an empty `matplotlib` figure window is also launched.  By removing calls to
    `plt.*` functions, we avoid this behaviour.
Add impedance calibration assistant/wizard

 - Add overview figure to feedback calibration wizards.
Fix fit_fb_calibration...

When calculating `V1` from measured `V2` when fitting, the *test-load*
capacitance must be used for `C1`.  Prior to this commit, the
*measured/computed* `C1` value was used, causing the fit values of `R2` to be
identical to the initial estimates *(i.e., effectively, no fitting occurs)*.
Convert baud_rate to int to match Boost signature
Add measurement progress bar for impedance wizard
Add progress bar for manual reference readings
Restore waveform/channel state after calibration
Fix return type of max_waveform_voltage getter
Use max_waveform_voltage in calibration

Rather than using a hard-coded actuation voltage, use 80% of the maximum
waveform voltage as reported by the control board.