Register custom filters

I want to expose an API for registering custom clean and smudge filters via libgit2.

My knowledge of C is rusty, and this is the first time I have looked at libgit2sharp in any great detail. So, I'm going to open this PR early, in the hopes that if anyone has time to spot anything terrible I do along the way they will be able to point me in the right direction :pray: 

###  Todo

- [x] Register and deregsiter a filter
- [x] Define apply callback
- [x] Define check callback
- [x] Define shutdown/init callbacks
- [ ] Tests
I'm starting to wonder if we shouldn't merge this class with the Filter one. Below my thoughts, feel free to ingore me if that doesn't make any sense.

 - Making `Filter` an abstract class
 - Adding some virtual `Clean()` and `Smudge()` empty methods (and making `apply` route the call to the correct implementation considering the value of `FilterSource.FilterMode`. Maybe could this even allow us to make `FilterSource` internal)
 - Adding some virtual `Initialize()`, `Check()` and `Shutdown()` empty methods
 - Would we really need to expose a `Cleanup()` method? I can't find a proper use case in LibGit2Sharp land where we may need it. Anyone?