ENH: Initial channel access server implementation

Will further integrate this into the command-line API and with positioners in the near-ish future. Need to create PVs for scan control as well.

Hope to do something like:
```
   In [1]: pv_instance = new_pv("my_pv", 10.0)
   In [2]: a = 10
   In [3]: variable_to_epics('a') 
   In [4]: pos = Positioner()
   In [5]: positioner_to_epics(pos, "fake_motor")
```
[1]'s pretty simple, creating a dbr_float `my_pv`. [2-3] would grab the variable `a` from the namespace, add a PV tied to the initial value, (optionally) updating it in the namespace when written via channel access. [4-5] would make a fake motor record out of the positioner.

A few things came about while restructuring to get this into place:
* Session manager initialization modified. 
* Examples use a fake IPython session
* PVPositioner settling time addition for put completion case (... yes, I'm using git incorrectly, this has nothing to do with the server)
* Simplified variable persistence through the session manager and StoreMagics
* Dispatcher wasn't being run since I changed it into a class.