Analog Signal Generator - Sine, Square, Ramp (  Sawtooth ), Triangular & TTL

### Analog Signal Generator

#### Summary of Changes

- [x] Analog Signal Generator module.
Implemented an Analog `SignalGenerator` module which can generate Sine, Square, Ramp ( Sawtooth ), Triangular and TTL - Square wave. It runs as a separate thread.

Accurate upto 10mv ( Recommended usage )

When Plotted via matplotlib ( I am planning to implement a matplotlib based simple oscilloscope which updates in real time ) 

The sine wave : 

```
sig = SignalGenerator(typ = 0, freq = 10, ampl = 2)
sig.set_offset(-0.5)  # To make the range as -1 to 1
```
![Sine Wave](http://i60.tinypic.com/2lsv0av.png)

The triangular wave : 

```
sig = SignalGenerator(type=3, ampl = 5, freq = 10)
sig.set_offset(-2.5) # Set range as [ -2.5 , +2.5 ]
```

![Triangle Wave](http://i59.tinypic.com/13zz7uf.jpg)

The Amplitude Modulated wave using 2 SignalGenerator objects ( one for message and one for the carrier )

```
m_t = SignalGenerator(typ = 0, freq = 10, ampl = 1)
m_t.set_offset(-0.5)
 
c_t = SignalGenerator(typ = 0, freq = 100, ampl = 10)
c_t.set_offset(-5) # To make the range as [-5, 5]
 
c_t.set_modulation_input(m_t.outputs)
c_t.set_modulation_type(1)
 
time.sleep(0.5) # To allow setup time
 
c_t.last_updated_time, (c_t.outputs[0].voltage - c_t.outputs[1].voltage)
 
data = np.zeros(shape = (2, math.ceil(m_t.time_period / c_t.sampling_time_interval)))
 
for i in range(data.shape[1]):
data[0][i] = m_t.last_updated_time + m_t.time_period * i
data[1][i] = c_t.outputs[0].voltage - c_t.outputs[1].voltage
time.sleep(c_t.sampling_time_interval)
 
fig, ax = plt.subplots()
 
ax.plot(data[0], data[1])
 
plt.show()
 
m_t.kill()
c_t.kill()
```

![am](http://i58.tinypic.com/2mpbscp.png)

- [x] Extensive tests