Retain/autorelease the mnemonicKey before saving it

Avoids the menemonicKey being released before it's saved
remove unnecessary @synchronized() calls

* In QSCatalogEntry, `contents` isn't written to the file, `writeArray`
is. In addition, `arrayByPerformingSelector:` is alreay designed to put
a lock on `contents` during enumeration.
* In QSLibrarian, we don't care about `catalog`, just the immutable
`leafEntries`. And now that `entryContents` is a local copy (also
immutable), no need to protect it from changes on other threads.
move the matchedString retain/autorelease to within the getter
fix some static analyzer things
Use atomic setter/getter for QSCatalogEnty _contents

Also - make the 'contents' array immutable.
Retain/autorelease QSTasks to keep them around a little longer
try/catch in saveIndex and log the error

Also: perform saveIndex run on the scanQueue
Move retain/autorelease to the getter
Simplify if() statement
Merge pull request #1279 from quicksilver/crashes

Crash Fixes