Add empty Effect class
Add basic functionality to Effects

- Doesn't work properly yet because there is no active context
- Manages the shader objects and the shader program object
Fix effects not getting garbage collected

Make the static list All hold weak references to the effects instead.
Fix effects not compiling

- Activate the dummy context before trying to do anything
- Replace glPosition with gl_Position in the default vertex shader code
Implement IDisposable in the Effect class
Add SetParameter method for effects

Sets an uniform variable in the shader program.
Add GetParameter method for effects
Make effects thread-safe
Add public IsActive property for effects
Fix effect parameters not working

The effect needed to be made active before doing anything with it.
Fix effect VertexShader and FragmentShader property getters crashing
Change Effect.SetParameter to take matrices by value instead of by reference

This simplifies stuff. If performance becomes a problem later, we can
just add an overload that takes a reference.
Add tests for effects