[BUG] Phalcon\Http\Request::hasFiles() and getUploadedFiles() do not work with file arrays

See #878, #884 — this fixes them.

For #878: if we have a file array like this:

```html
<p>file1:<input type="file" name="photo[]"></p>
<p>file2:<input type="file" name="photo[]"></p>
<p>file3:<input type="file" name="photo[][]"></p>
<p>file4:<input type="file" name="photo[][]"></p>
<p>file5:<input type="file" name="photo[][][]"></p>
<p>file6:<input type="file" name="photo[][][][][]"></p>
```

the keys will be:
  * photo.0
  * photo.1
  * photo.2.0
  * photo.3.0
  * photo.4.0.0
  * photo.5.0.0.0.0

Main features:
  * Phalcon\Http\Request::hasFiles() understands file arrays and returns correct number of uploaded files
  * Phalcon\Http\Request::getUploadedFiles() understands file arrays

Also:
  * added getKey() method to Phalcon\Http\Request\File
  * `key` is passed as an optional second parameter to Phalcon\Http\Request\File::__construct()
  * added getError() method to Phalcon\Http\Request\File (can be useful when all files are retrieved, not only those uploaded successfully)
  * added __set_state() and isUploadedFile() methods to Phalcon\Http\Request\File (the first one is meant for testing, the second one can be used to make sure that the file was really uploaded to the server and $_FILES is not forged)

Suggestions:
  * getUploadedFiles() should probably return an associative array, the key being the second argument to `Phalcon\Http\Request\File::__construct()`. I don't think this will break the existing implementations.
  * add getKey(), getError() and possibly isUploadedFile() to Phalcon\Request\FileInterface