Fix NullPointerException, add missing JavaScript literal binders and correctly convert null in binders

First of all: I created a *very* simple [project](https://github.com/mkurz/playRoutesTest) to demonstrate the bugs I stumpled into using Play 2.3.5. (After running `activator new routesTest play-java` I only added some basic routes in `conf/routes` and added the accompanying actions in `app/controllers/Application.java` with [this commit](https://github.com/mkurz/playRoutesTest/commit/c923721ed3cdca7f9c6f187e5e6e0cff7b37a298?diff=unified)).

Now Step-by-Step:

**1) There are some JavaScript literal binders missing**
Have a look at the [routes file](https://github.com/mkurz/playRoutesTest/blob/master/conf/routes). When you want to compile this routes file you get following errors:

    No JavaScript literal binder found for type play.libs.F.Option[Integer]. Try to implement an implicit JavascriptLiteral for this type.

and

    No JavaScript literal binder found for type Long. Try to implement an implicit JavascriptLiteral for this type.

and

    No JavaScript literal binder found for type Boolean. Try to implement an implicit JavascriptLiteral for this type.

(You would also get an error for the missing *UUID JavaScript literal binder* - I already submitted the PR #3508 for this missing UUID JavaScript literal binder yesterday)

So with this PR I added the missing JavaScript literal binders for `play.libs.F.Option`, `java.lang.Long` and `java.lang.Boolean`.

**2) NullPointerExceptions occur when assigning `null` as a default to *Java* Types in a route**
After implementing the missing binders (including #3508), the project will now fail with a `NullPointerException` in the already existing `java.lang.Integer` JavaScript literal binder when assigning `null` as a default in a route ([see line 13](https://github.com/mkurz/playRoutesTest/blob/master/conf/routes#L13)). If you [have a look at my fix](https://github.com/playframework/playframework/pull/3514/files#diff-7400ac02cbec8f8d98c8173091e15e55L227), you will see that's because `.toString` is called without checking if the default value is null before. (FYI: To actually get this `NullPointerException` you actually have to call the JavaScript route like in [line 53 of the Application.java](https://github.com/mkurz/playRoutesTest/blob/master/app/controllers/Application.java#L53). If you don't call it you won't experience the NullPointerException).

**3) When assigning null as a default to a String in a route, it gets converted to a JavaScript "null" String instead of a Javascript null value**
[See line 9 in the routes file](https://github.com/mkurz/playRoutesTest/blob/master/conf/routes#L9). Without this PR following JavaScript is generated for JavaScript reverse routing (in case you run my test project you could just have a look at `/assets/routes.js`):

    if (id == "null") {
    return _wA({method:"GET", url:"/" + "stringNull"})
    }

With my PR it correctly becomes:

    if (id == null) {
    return _wA({method:"GET", url:"/" + "stringNull"})
    }

Please also backport this PR and #3508 to 2.3.x (be aware to rename JavascriptLiteral to JavascriptLitteral for the 2.3.x branch).
Thanks!
I'd prefer:

    value match {
      case null => "null"
      case _ => "\"" + value + "\""
    }

It's clearer to read and saves on a few object allocations.