Implementation of a dummy widget and a basic addin, Faces Tool.

- Implemented using code from the current tagging and editors classes.
Database update to create *faces* and *face_locations* tables.
FaceStore improvements and implementations.

- Better string comparison in FaceStore.GetFaceByName.

- Improved FaceStore.CreateFace so it won't try to create
  a face with the same name twice.

- Implemented FaceStore.LoadAllFaces, FaceStore.CreateTable,
  FaceStore.InsertFaceIntoTable, FaceStore.Remove and
  FaceStore.Commit.
Added more face tagging functionality.

- New FaceLocation and FaceLocationStore clases to implement faces
  with photos relationships.

- FacesPageWidget is a *singleton* now, so you can access it from
  anywhere —I need it at least to access the widget from the
  new FacePopup class... I don't like it a lot but I think it's
  far better than having faces-related methods in MainWindow as it
  happen with tags-related methods.

- FacesPageWidget is a VBox now, and I've started implementing a fake
  interface that shows you the already created test faces and a
  button —only if you are in ViewContext.Edit mode— that would create
  test faces if they don't exist yet. This is for testing database
  persistency and the ability to rename and delete those test faces
  with all the event handling stuff. But they don't appear in the photo
  in a graphical manner yet.

- FaceSelectionWidget is now a SaneTreeView instead of a regular
  GTK+ TreeView.
Bug fixed in FaceLocationStore.

- Incorrect place to instantiate internal cache lists made program
always crash while loading the database if there was saved face locations.
Implemented FaceLocationStore.Get overload.

- It uses FaceLocationStore own cache to retrieve the FaceLocation
related to one Face and one Photo —instead of the one provided
by superclass which works with the id of the object.
Implemented FaceStore.GetFacesByPhoto and FaceStore.GetAllNames.
Error fixed in ImageView.CanSelect.

- If you defined CanSelect to false it didn't cancelled the selection
even if the existing code seemed like doing that —because CanSelect
was setting can_select to false before defining Selection, and
Selection setter does nothing if can_select is false.
Error fixed in PhotoImageView.OnExposeEvent.

- It was returning true even if it was doing nothing —and doing
that disallows other code to listen to the expose event.
Added EventMask.LeaveNotifyMask to the GdkWindow of ImageView.

- I need LeaveNotifyEvent events to use them from Faces tool.
Faces Tool UI.
Added PhotoImageView.PhotoLoaded event.

- It was impossible to know when the photo has been completely loaded.
UI integration and issue fixes.

- FacesToolWindow is no longer a floating window, now it is in the
sidebar —to integrate better with F-Spot UI.

- To achieve the above I had to improve the way of instantiating
FacesTool: Before this change you needed to press a button to
activate the tool, but now it will be always visible when displaying
a single image, so I had to connect to some events to instantiate
it in the correct time to avoid some issues like copying a buffer
of low quality that is shown while the image is loading or a
problem with faces locations because of instantiating FacesTool
before the size allocation for the image.

- I've extended the changes needed for the above to correct a big design
problem: The face shapes need an scaled version of the pixbuf
currently displayed to be able to *erase* themselves, but until now
each of the shapes maintained a scaled copy, wich was of course more
time and memory consuming than needed. Now that scaled copy is
maintained by FacesTool.
Memory management corrections.
New Sidebar.PageSwitched event.

- With this new event SidebarPages can know when the user is changing
between them.
UI integration improvements.

- There was a lot of problems when switching from having a floating window
to showing the tool in the sidebar, like loading incorrect face locations
when moving to next/previous image and having the FacesTool always
active so you couldn't use other tools that require selection. Now
the FacesTool has a better activation and loading mechanism to avoid
unnecesary load of data when the tool is not active. It will be
active if you have *Faces* selected in the sidebar page selector,
and if you don't, the face locations won't be shown when entering
the image area with the mouse, and of course the selection works
again. Also, if you change to next/previous image the FacesTool
won't be loading data if it isn't visible.

- The *Cancel* button has been removed because now there isn't a dialog
to close, and the *OK* button has been replaced by a *Save* button
that will save the changes if there is something to save.
Changed ImageView.ImageCoordsToWindow access from protected to public.

- Exposing ImageView.ImageCoordsToWindow enables external
tools —like the new Faces tool— to paint to the ImageView. Without this
method those external tools would need to duplicate code about
image orientation and image position in the gdk.Window, for
example.
Faces tool architecture and compatibility improvements.

- Now Faces tool is compatible with zooming, scrolling and rotating
the image.

- Zoom compatibility revealed that resources consumption —memory and CPU
time— of Faces tool was too high, because it used to
maintain a copy of a rescaled Pixbuf to erase FaceShapes —to
hide them when neccesary— by drawing with the image itself. Now it
uses Widget.QueueDrawArea.
Now the sidebar Widget of FacesTool is inside a GtkScrolledWindow.

- This way it can grow as much as necessary —until now if you add
faces to a photo you would end breaking F-Spot's layout because
of a too tall sidebar.
Fixed an incredibly critical locale-related issue with face locations.

- The serialization of the face location coordinates have been
created using Double.Parse with *R* format, but without specifying
the CultureInfo.InvariantCulture —so if you saved the face locations
using for example Spanish and then you change your locale settings to
English you would see your face locations wrong.