**Revamped the Scell API to embrace immutable objects**
`Monitored` objects are now assumed to be immutable and the user/library code will not alter them in any way. Instead of mutating the `readable` and `writable` attributes which are not inherently thread safe, `Event` objects are emitted when selecting, which are lightweight wrappers over the readability/writability of the monitored file objects.
**Removed some methods from the Selector class**
In order to make the API more lightweight, typically unused methods such as `Selector.only` are removed. Instead, a **`Selector.scoped`** method is added which allows one to write code like:
python
with selector.scoped([fp1,fp2]) as [m1, m2]:
m1.callback = lambda: 1
m2.callback = lambda: 2
[ev.callback() for ev in selector.select()]
**Less primitive oriented code**
The `Monitored` objects no longer support mode-strings, i.e. `rw`, `r`, etc. Instead, the intended meaning is "injected" by the `Selector` class, i.e. the mode-string is parsed by the selector, which in part encourages immutability as well.