spider non-mutating

- visited is a local var
- outstanding is a parameter
- visited_pages are returned
- page_links are mapped (and passed down rather than called into self)

- run is made bigger - will need to reduce
- visit_page is made bigger

- book_def holds 100% base_dir
- book_def holds max_paragraphs (to derive base_dir only)
- book_def can set cache_filname for tests ( ":memory:" )
- page_def no longer holds url
- page_def holds max (for spider