Fixing non-exhaustive yet straightforward matches
Hardens isCheckingClasspath

Removing unwanted changes in ScalaClassPath constructor (merge error).
Harden Settings toggling
Switch most of Classpathmanagement internals to using ScalaVersion
rahter than Strings
remove deprecations/unused from sdt.debug
Avoid possible exception on lost ScalaInstallation
Remove duplicate class
Split Scala Installation Management
Moves BuildSuccess and its Listeners to Pub/Sub
Introduces api.ScalaProject

Moves most of functionality to API package for ScalaProject

Documents the API trait.
Reviewer's comments

Linting:
- Try.toOption rather than match x2
- reverting the switch of sourceOutputFolders to a Map[IContainer, IContainer]
- split ScalaInstallation, ScalaInstallationChoice, ScalaModule in their own File

Comments:
- typo in scalaVersion
- Documented classpathHasChanged's parameter
- 2.10 mention in TextHoverFactory

Removals:
- scalaLibraryFile removal
- ScalaProject's jdkPaths removal

Renamings
- ScalaProjectMessage -> ScalaProjectEvent
- scalaLib -> scalaLibrary
- allJars() -> allJars
- directDependencies() -> directDependencies
- exportedDependencies() -> exportedDependencies
- transitiveDependencies() -> transitiveDependencies
- sourceFolders() -> sourceFolders
- outputFolders() -> outputFolders
- outputFolderLocations() -> outputFolderLocations
- storage() -> storage
- hasScalaNature() -> hasScalaNature
- isClasspathValid -> isClasspathValid()
- storage() -> storage
- prepareBuild() -> prepareBuild
- isUsingCompatibilityMode -> isUsingCompatibilityMode()
- getHashString() -> hashString
- getDesiredSourceLevel() -> desiredSourceLevel()
- getDesiredInstallationChoice() -> desiredInstallationChoice()
- getDesiredInstallation() -> effectiveScalaInstallation()
Merge pull request #747 from huitseeker/issue/ScalaProjectAPI

An API for ScalaProject