Feature - Mutability and Immutability

This PR splits the basic interface implementation into two different structures, one mutable and one immutable.

The tests and the `README.md` examples have been updated too, but none of the API has changed. This should be completely backwards compatible. :+1: