Remove gdk_threads_enter/exit (#685740)

Use of these functions is depreciated and making gtk calls in a background
thread still sometimes causes deadlocks or crashes.  Change ped exception
handler to instead use an idle function to force the main thread to display
the dialog box.

Part of Bug 685740 - Refactor to use asynchronous command execution
Use a full fledged nested main loop while waiting and pulsing progress bars (#685740)

Win_Gparted and Dialog_Progress were looping on Gtk::Main::events_pending()
and iteration() with usleeps in between.  Use a full mainloop instead and
a proper timeout to trigger pulsebar updates instead of usleeps.

Part of Bug 685740 - Refactor to use asynchronous command execution
Switch Dialog_Progress to use Glib thread instead of pthread (#601239)

Dialog_Progress was using pthread_create() so that it could later
pthread_cancel() the thread.  pthread_cancel() is wildly unsafe and full
of errors.  Changed to use Glib's threads like the rest, and only cancel
between operations.  Because it can take some time to cancel, disable
the cancel button once it has been clicked once.

Bug 601239 - Please allow 'Cancel after current operation'
Remove mtoolsrc file

fat16 and fat32 were creating a temp mtoolsrc file to configure the
command to reference a drive letter and ignore certain errors.  They have
been changed to pass this information via the command line and environment
instead.
Reduce threading (#685740)

Win_Gparted and Dialog_Progress were creating threads to perform most
functions in the background.  Most of the time, the only reason the
threads blocked was to execute an external command.  The external command
execution has been changed to spawn the command asynchronously and wait
for completion with a nested main loop.  While waiting for completion,
the pipe output is captured via events.  In the future, this will allow
for it to be parsed in real time to obtain progress information.

Those tasks in GParted_Core that still block now spawn a background thread
and wait for it to complete with a nested main loop to avoid hanging the
gui.

Part of Bug #685740 - Refactor to use asynchronous command execution
Thread the internal copy algorithm (#685740)

Have the copy code create a background thread to do the actual copying so
that it won't block the main loop.

Part of Bug 685740 - Refactor to use asynchronous command execution
Add proper cancel support (#601239)

Interested operations can now connect a signal to their OperationDetail
to be notified of a cancelation request.  The internal copy/move code
will now cleanly stop on cancelation, allowing the partition to be
rolled back to its previous state.  This makes canceling a move
perfectly safe.

After clicking cancel, the button changes to "Force Cancel" and is
disabled for 5 seconds.  Operations that are safe to cancel will do so
and those that are not will continue to run.  Clicking force cancel
asks operations to cancel, even if doing so is unsafe.  For the
internal copy/move algorithm, canceling is always safe because an
error results in a rollback operation.  Canceling the rollback is
unsafe.  For external commands, filesystem modules may indicate
that the command is safe to cancel or not.  Canceled commands will
be terminated with SIGINT.

As a result of the new safe cancel vs force cancel distinction, the
scary warning about cancl causing corruption has been moved to
after clicking the force cancel button.

Part of Bug #601239 - Please allow 'Cancel after current operation'
Flag mkfs and copy operations as safe to cancel (#601239)

Closes Bug #601239 - Please allow 'Cancel after current operation'
Bind Insert key to new partition

Add an accelerator key for Insert to trigger the new partition menu item.
Select unallocated partition by default (#667365)

After a refresh, instead of having no partition selected, default to the
largest unallocated partition.  This allows immediate creation of a new
partition in the unallocated space.

Closes Bug 667365 - Free space should be selected by default
Bind ctrl-enter to apply-operations

Bind the keyboard accelerator key ctrl-enter to apply operations.
Remove simulation pass ( read test ) on move

The simulation pass is unnecessary and just wastes more time when moving,
so get rid of it.
Check fs after reverting partition table

After a failed or canceled move, the move was reverted, and the filesystem
was fscked while the partition was still in the expanded state encompassing
the original and destination partitions, resulting in errors and
corruption.  Move fsck to after the partition table has been restored to
its original state.
Don't revert more than needed

After a move is canceled or fails, an attempt is made to revert the disk to
its previous state.  This was moving back all blocks that had already been
copied.  Many of the first blocks copied during a move do not overwrite
any valid data, and so do not need put back after an error, so don't bother
doing so.
Clean up OperationDetail timer initialization

The timer variables were not being properly initialized leading to bogus
time values sometimes being displayed.
Combine duplicate code for ext[234]

There were separate modules for ext3 and ext4 even though there
were virtually no differences with ext2.  Remove the duplicate
modules and patch ext2 to serve as a common reference for all
three sub types.
Fix dialog progress details view size (#602635) (#662722)

The details view refused to use additional space, even after the window was
expanded, instead continuing to use the scrollbars.  Now resizing the
window will be allowed regardless of the state of the details expander, and
the details view will expand to use the extra space.  Also request enough
initial width to not need a horizontal scrollbar.

Closes:
Bug 602635 - list of tasks in apply dialog does not expand to the available
             vertical space

Bug 662722 - Increase default width of "applying..." dialog to include the
             "Details" status icons
Cleanup duplicate fs code

Many filesystems do not implement some of their methods, but had to provide
dummy implementations.  Remove all of the dummy implementations and instead
just provide one in the base FileSystem class.
Pass Partition instead of just its path to FileSystem::copy()

Other operations get the Partition object and can look up the path or other
attributes they need.  The copy method should be no different.