Extract SiteMapProvider Core logic

- Begin splitting the SiteMapProvider into smaller modules
- Main aim is to extract caching functionality AND to prevent nodes from
  storing their states