Remove unused code from log.py
Add pywin32 as dependency in setup.py

This omission was reported by Muelli in issue #4. Even though the core
of Dragonfly is not operating specific, it does rely on Win32 functions
for interfacing with the backend speech recognition engines, for
executing e.g. keyboard and mouse actions, etc. In its current state it
therefore does require pywin32 to operate.

I added pywin32 to the install_requires argument of the setup() function.
This will give an error during installation if that package is not
present on a system. It does not automatically install it, because
pywin32 isn't available via PyPI. On my test systems the presence of
pywin32 is detected correctly after manually installing it.

Resolves #4.
Add description of commit message format
Allow window handles to be longs as well as ints

This change allows window handle values to be of int and long types,
whereas previously only the int type was allowed. Window handles under
64-bit Windows can be of the the long type.

This change improves handling of invalid handle value types. It
raises a TypeError with a descriptive string instead of simply
asserting the type check.

This change adds a test verifying correct behavior for various handle
value types.

Resolves #2.
Fix Timer logging of exceptions in callback

This change fixes a typo in the log message used by the Timer class when
an exception is raised during a callback function. The typo caused the
exception not to be logged.

This change adds a test verifying correct handling and logging of
exceptions raised within callback functions.

Resolves #10.
Fix non-ASCII dictation handling

This change fixes the handling of Dictation element results that include
non-ASCII characters, for example the last letter of "touché". It
modifies Dragonfly logic related to Dictation elements to use Unicode
objects internally and adds encoding and decoding to and from
windows-1252, as used by Dragon NaturallySpeaking, at the appropriate
places.

This change adds several tests verifying correct handling of non-ASCII
characters in dictation results.

Resolves #11.
Update dfly-loader-wsr.py to fix engine loading

This change updates the SAPI5 engine loading logic in the
dfly-loader-wsr.py example file to match the current import
and get_engine() file structure.

Resolves #13.
Add link to scripts for using DNS from OS X

Add a link to Nicholas Riley's DragonControl scripts for using DNS
as a dictation buffer for MacOS X.
Add __unicode__ method to ActionBase
Include words when Mimic action converted to str
Decode Paste action input using correct charset
Improve error reporting during engine loading
Encode log output during recog parsing

Before this change the messages where output without an explicit
encoding, and were therefore encoded using the default ASCII charset,
leading to errors for non-ASCII characters (for example in "touché").
This change uses UTF-8 as the encoding for log messages.
Improve error message for non-typeable characters
Add tests for non-ASCII handling by actions
Fix Word class' handling of unknown words

The Word class uses natlink.getWordInfo() to retrieve formatting
information. That function returns None if the word is not present in
the dictionary. Before this change, that resulted in an error. After
this change, such unknown words are treated as if they don't have any
formatting info.

This change also adds test cases for the Word class.
Merge branch 'feature/non-ascii'
Fix missing import

The Transition class raises an ActionError after a timeout waiting
for a context switch. However, before this change the ActionError class
wasn't imported.
Encode word to correct charset for natlink

Dragonfly stores words from dictation results as Unicode objects
internally. This change adds conversion from Unicode to the
windows-1252 charset before passing words to natlink.getWordInfo()
to retrieve formatting info in the Word class.
Add support for SAPI 5 in process recognizer

This change adds the Sapi5InProcEngine class, derived from
Sapi5SharedEngine but using the in process recognizer instead of the
shared recognizer.

Resolves #3.