$cordovaFile Enhancements

A few changes here:

1. Changed $cordovaFile producer from a factory to a provider so that the filesystem size and type could be set using module.config(). Not a perfect solution because I can imagine some use cases where you would want to use both the temp an perm file systems in the same app, but I couldn't think of a better way to do it without radically changing the $cordovaFile api. Any suggestions welcome!
2. Added some more absolute file path reader methods.
3. Improved error handling of all $cordovaFile methods.
4. Refactored some duplicate code.
5. Updated $cordovaFile mock to match $cordovaFile changes & new methods.
6. Added some karma tests for $cordovaFile (this is possible without mocks because the cordova file plugin is just an implementation of the JavaScript file api supported by Chrome.
7. Added code to the keyboard plugin to broadcast the native keyboard events.

Any feedback or suggestions welcome!