Caching

This is a first stab at a simpler Reader class see #50 

The general idea is: 
* Make public methods that are not needed private (this will make it **much** easier to change things later on. The reader basically only needs to download and parse the feed, so only 2 methods are now public
* The download tests first if the document can be parsed as a feed. If not it tries to get the feed link from the page that is served at that location. Question: how can we test if the Client failed to download the page?
* Pass around objects rather than setting private members. This is done because it is now clear in which order you have to call the methods and state in general is evil because it adds many different variations to test

**Note**: Tests not adjusted and untested, waiting for feedback on the general design

Feed parsing
============

Download and parse a feed
-------------------------

Try this example from a command line script:

```php
<?php

require 'path/to/PicoFeed.php';

use PicoFeed\Reader;

$reader = new Reader;

// Try to discover the XML feed automatically
$resource = $reader->download('http://bbc.co.uk/news');

// in case a feed is found for the url
if ($resource) {
    $parser = $reader->getParser(
        $resource->getContent(),
        $resource->getEncoding(),
        $resource->getUrl()
    );

    $feed = $parser->execute();

    if ($feed !== false) {
        echo $feed;
    }
}
```

- The method `download()` returns `false` when there is something wrong during the download or the feed detection
- The call `$parser->execute()` returns `false` when there is a parsing error


Handle HTTP cache
-----------------

To avoid downloading and parsing the feed each time, it's a good idea to handle the HTTP caching:

1. After the first HTTP request, we save somewhere (in a database) the headers Etag and Last-Modified for the next checks
2. If the feed is not modified, we don't need to parse again the feed

Example:

```php
use PicoFeed\Reader;

$reader = new Reader;

// Get last modified infos from previous requests
$lastModified = '...';
$etag = '...';

// Download directly the feed
$resource = $reader->download('http://linuxfr.org/news.atom', $lastModified, $etag);

// Return true is the feed has changed
if ($resource && $resource->isModified()) {
    $parser = $reader->getParser(
        $resource->getContent(),
        $resource->getEncoding(),
        $resource->getUrl()
    );

    $feed = $parser->execute();

    if ($feed !== false) {

        // Save cache infos for the next request
        $lastModified = $resource->getLastModified();
        $etag = $resource->getEtag();
        $feed_url = $resource->getUrl();
    }
}
```

## Future
If we have exceptions we could do something like this:

```php
use PicoFeed\Reader;

$reader = new Reader;

// Get last modified infos from previous requests
$lastModified = '...';
$etag = '...';

// Download directly the feed
try {
    $resource = $reader->download('http://linuxfr.org/news.atom', $lastModified, $etag);

    // Return true is the feed has changed
    if ($resource->isModified()) {
        $parser = $reader->getParser(
            $resource->getContent(),
            $resource->getEncoding(),
            $resource->getUrl()
        );
        $feed = $parser->execute();

        // parse feed

        // Save cache infos for the next request
        $lastModified = $resource->getLastModified();
        $etag = $resource->getEtag();
        $feed_url = $resource->getUrl();
    }
} except(\Exception $e) {
    // test exception class and return/throw appropriate message
}
```