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).
Need to fix this later, as that code means we can remove only active light, disabled light will be still stored in rayHandler.disabledLights array.