Gideon : Added a new Feature function  src/joshua/decoder/ff/LabelCombinationFeatureFunction.java
plus a test for it.
Refactored the "get" method in FeatureFunction / FeatureVector, to get a certain feature.
This method was returning 0 if the element did not exist, and this was used in other methods
(add) however, this is a risky  kind of programming and indeed can lead to bugs and did.
What was happening is that the feature table was queried with an uppercase version of
certain features, so that it looked like those feature values were 0, while in fact
they were not : they were being queried for by a wrong name.
This is now fixed: the get method throws a runtime exception when an element does not
exist, as it should. The containsKey method should be used before querying, this
more defensive style of programming (failing fast) prevents such nasty bugs.
Finally made a first step towards improving JoshuaConfiguration by implementing a
reset method. This makes it possible to run the decoder twice within the same
java program - provided the reset method is called after the first run.
This is nescessary because the globally shared state of JoshuaConfiguration leads
to errors when already initialized and set a second time (which was what was
happening before). The global state of StatefullFF faces the similar nasty
problem with shared state and also needed a reset method for the same reason.

This all points to one inevitable conclusion though: JoshuaConfiguration must
be refactored, and made into a normal (non-static) object that is passed
to the classes that need it. This makes the whole enterprise more clear and
clean and more structured at the price of some work.

       modified:   src/joshua/decoder/Decoder.java
       modified:   src/joshua/decoder/JoshuaConfiguration.java
       modified:   src/joshua/decoder/ff/FeatureFunction.java
       modified:   src/joshua/decoder/ff/FeatureVector.java
       new file:   src/joshua/decoder/ff/LabelCombinationFeatureFunction.java
       modified:   src/joshua/decoder/ff/StatefulFF.java
       modified:   src/joshua/decoder/ff/tm/GrammarReader.java
       modified:   src/joshua/util/FileUtility.java
       new file:   src/joshua/util/NBestListUtility.java
       new file:   test/joshua/decoder/FeatureFunctionsTest.java
Gideon : Refactored the JoshuaConfiguration. Made it into a non-static class, that is
passed as an object to the classes that need it rather than being accessed as a global
object, which leads to all kinds of unexpected behavior when running multiple
instances of Joshua within the same VM or alternatively multiple instances
after each other within a java test (e.g. executing the decoder twice).
Generally it can be argued that global state is almost always suboptimal,
unless there are very convincing arguments to adopt it - rather than just
convenience - which seems to be not the case here.

TODO: StatefullFF, amongst other classes still has global state. This should
also be refactored to make the whole enterprise completely without requiring
reset methods.
Gideon : Reverted chance to .classpath which was not intended
(But is in fact nescessary to have things working in eclipse without errors of missing libraries)
Gideon : Fixed a bug as a result of assuming the function FeatureVector.get(String feature) returns
0.0 for non-existing features. This was changed because it lead to other bugs not to go
detected. (I.e. prefering fail early). However, this was not coded for in the implementation of
Translation.java in the changes with respect to forestRescoring. This has been fixed now
and a more informative exception message has been added to FeatureVector.
TODO : Consider if this can be solved still in a neater way without letting FeatureVector return
0 for non-existing feature names, without any message that something might be wrong.
Gideon : Refactore test/joshua/decoder/FeatureFunctionsTest.java to be compatible with Java 6
Gideon : Adapted Changes to FileUtility and FeatureFunctionsTest to assure compatibility with Java 6
       modified:   src/joshua/util/FileUtility.java
       modified:   test/joshua/decoder/FeatureFunctionsTest.java
added junit to build path
Renamed feature function for consistency with others
Feature function names and weights are now case-sensitive

This addresses the fact that the case-insensitivity was not very consistent,
and also removes the call to toLowerCase() that was called every time a feature
value was accumulated.

Test cases were updated. Everything should pass.
Merge branch 'gwenniger'