Progress context manager

This adds the ability for all of the three progress bars to be context managers in addition to their normal use with an iterable:

```
with progress.bar(expected_size=200) as bar:
    for i in range(200):
        bar.update(i+1)
        sleep(0.05)

with progress.dots() as bar:
    for i in range(200):
        bar.update()
        sleep(0.05)

with progress.mill(expected_size=200) as bar:
    for i in range(200):
        bar.update(i+1)
        sleep(0.05)
```