Clean up header-declarations in backend
Changes to Camera API

- list_cameras() now returns Camera instances that are uninitialized
- Methods on Camera that need it to be initialized are decorated with
  @_needs_initialized, which calls a new _initialize() method
- Camera now stores a CameraAbilities structure in a private member
Add supported_operations field to Camera, check against it
Changes to file API

- Introduce new Directory class that handles related operations
- Rename CameraFile to File
- Each File/Directory file knows which operations the camera supports
  and checks against that before executing an operation
Add storage_info property on Camera
Only return actual cameras from list_cameras
Stylistic fixes, better docstrings
Add usb_info and model_name properties on Camera
Fix bug in File.iter_data()
Fix two issues in Camera.capture()
Improve error handling

- GPhoto2Error is now the base class for a range of more precise
  error types
- These error types inherit from Python built-in exceptions where it
  makes sense (e.g. IOError, OSError)
- We now only raise an error when the code is negative, this makes the
  blacklisting of quite a few functions unneccesary
Make lazy initialization of Camera optional
Add access info to Camera.storage_info
Pass path variables as bytestrings into Directory.upload
More docstrings
Remove weird workaround for performance issues, seems to have resolved
itself with the latest changes.
Nicer __repr__ for Camera
Use SimpleNamespace for Camera.storage_info instead of dict
Some refactoring

- Only store a reference to the Camera object, not to the raw C pointers
  for camera and context on Directory, File, ConfigItem
- Move waiting for events into its own method
- Catch exceptions when waiting for events and log them
Make check for operation support before execution optional