Add page management methods in Notebook

Instead of having a field that returns the raw HashMap containing
the pages in the notebook, it's probably safer to make that
field private and use a few wrapping methods to modify the map.

The provided methods are:

* add_page: adds a page to the notebook.
* delete_page: deletes a page from the notebook.
* has_page: check whether the notebook has a page or not.
* get_page: get a page from the notebook, given its title.

Some public and read-only fields are also provided.

* size: how many pages are there in the notebook.
* pages: get a set with all the page titles on this notebook.

Om, also, dirty unit testing support was dropped. It's probably
better to take care of formal unit testing later. For now, just
a few asserts, and then delete the function.
Link the page to a notebook bidirectionally

Page should not just be a value inside Notebook's hash map.
A new field has been defined in Page class, with a reference to
the notebook this page is in.

* Whenever a page is added to a notebook, the notebook instance
  is set as the value of that field. This way, you can access
  the notebook a page is in by just having a reference to the
  page.

* Also, if you delete a page from a notebook, that reference
  should be cleared, so the connection should be destroyed.