orly/pacakage/manager: Isolate package pre install step properly

Previously we would tell via callback that a package install succeeded
even if we then threw when loading the next package. This made it so
there was no possible way to rollback / you could end up with half
installed packages.
pckg -> pkg
package/manager: Make the package manager report to the pre_install steps if it's a new package version

New package version is true if it's an upgrade or new install of a package.

Fixes #70 as well.

NOTE: This is very fragile. If a user installs two independent compiles of the same package all the index id mapping stuff will blow up.
orly/package/manager: Make reinstalling the same version of a package a noop

Makes it so we don't reload packages which could cause considerable issues.

Also makes it so end-users can basically assert the packages they want are always installed before making calls by always calling install before calling into a package (Although this will waste excess cycles as the installed package set is copied).
Log to syslog when the package manager no-ops on a 'install package' request
Merge pull request #76 from cmaloney/issue-70

Fixes #70
jhm/naming: Make a simple holder type alias for extension lists
Move GetCwd to base/path_utils.h
jhm/naming: Remove unnecessary check now that GetCwd is tested to not have a trailing '/'
base/stl_util: Wrap STL pop() to make it convenient
Allow <base/thrower.h> to throw exceptions which don't define GetDesc

This makes it so that standard exceptions can be used with <base/thrower> directly.
Remove FindOrElse function.

No one uses it, and it's equivalent to .at() with C++11. Thanks @mpark