RayHandler re-factoring with minor changes in Light

No breaking changes were done.

What were done:
A. Fixed/added/updated most of Javadocs
B. Light now implements Disposable and RayHandler now uses 
```java
    light.dispose()
```
instead of old way light disposing:
```java
    light.someField.dispose()
    light.someOtherField.dispose()
```
C. Fixed some typos, broken indentations, and make some code to look more clear and pretty

**I know that 'pretty' is quite a relative thing so any comments/feedbacks are welcome!**
If this will be useful to anyone going to update other files. If no, possibly going to do it anyway at least on my local branch...

D. Also a few TODOs added for discussion as some things (like *useDiffuse*) not fully clear to me from the philosophic side (e.g. why it is public and have a straight setter).