Close ScalaPresentationCompilers which weren't used for specified time

In the case when someone have open a lot of big projects and from various reasons there are created presentation compilers for many of them, they can consume a lot of memory (e.g. each of them can use tens megabytes of RAM or even more). Therefore it'd be better to have possibility to close unused presentation compiler, when given project still exists in a workspace, but user doesn't edit its code. Thanks to that GC will be able to free memory used by them.
 
Each PresentationCompilerProxy has some kind of activity listener which contains a timer checking periodically last activity time.
User can choose frequency in preferences (disable, set amount of minutes, decide whether open editors should be taken into account).
When this feature is disabled or ScalaPresentationCompiler is already closed, an instance of timer is stopped and freed, and also PropertyChangeListener is removed from PreferenceStore.
 
Unfortunately sometimes memory can't be freed, when there are still open editors, and user chose an option to ignore open editors. The reason is that a reference of a presentation compiler is still used somewhere. Investigations performed using the profiler and also empirical ones showed, this problem is related to implicits highlighting. Added code contains adequate comment related to this issue.
 
Also:
- fixed memory leak - ScalaProjects weren't freed due to a listener which wasn't removed
- updated license links
 
THIS PROGRAM IS SUBJECT TO THE TERMS OF THE SCALA IDE LICENSE.
IN ADDITION, THE FOLLOWING DISCLAIMER APPLIES IN CONNECTION WITH THIS PROGRAM:
THIS SOFTWARE IS LICENSED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ANY WARRANTY OF NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THIS SOFTWARE MAY BE REDISTRIBUTED TO OTHERS ONLY BY EFFECTIVELY USING THIS OR ANOTHER EQUIVALENT DISCLAIMER IN ADDITION TO ANY OTHER REQUIRED LICENSE TERMS.
 
THE FOLLOWING DISCLAIMER APPLIES TO ALL SOFTWARE CODE AND OTHER MATERIALS CONTRIBUTED IN CONNECTION WITH THIS SOFTWARE:
THIS SOFTWARE IS LICENSED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ANY WARRANTY OF NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THIS SOFTWARE MAY BE REDISTRIBUTED TO OTHERS ONLY BY EFFECTIVELY USING THIS OR ANOTHER EQUIVALENT DISCLAIMER IN ADDITION TO ANY OTHER REQUIRED LICENSE TERMS.
ONLY THE SOFTWARE CODE AND OTHER MATERIALS CONTRIBUTED IN CONNECTION WITH THIS SOFTWARE, IF ANY, THAT ARE ATTACHED TO (OR OTHERWISE ACCOMPANY) THIS SUBMISSION (AND ORDINARY COURSE CONTRIBUTIONS OF FUTURES PATCHES THERETO) ARE TO BE CONSIDERED A CONTRIBUTION.  NO OTHER SOFTWARE CODE OR MATERIALS ARE A CONTRIBUTION.
I know about tasks repeated periodically, but this was intentionally implemented that way. The delay isn't constant. User doesn't choose constant time between checks but max possible (theoretically) duration of inactivity. For instance:

1. Let's assume that we have default 2 minutes set as max inactivity duration.
You are typing something all the time and the last activity time is updated. Next check will be performed after 2 minutes.
2. Last activity was observed one minute ago. The next check should be performed after one minute (because it's possible that then we'll reach 2 minutes of inactivity).

It doesn't work exactly that way, when current inactivity duration  > max inactivity duration, there are open files and we don't ignore this fact, but I didn't want to add triggers related to closing last files from projects. I think, it's not worth to do that.