Feature gif export panel

This PR contains two features : 
- GIF export (as the title of the branch suggests)
   - the GIF export button now opens a drawer
   - user can select the resolution of his GIF
   - the GIF is displayed inside of the drawer after upload
   - a new Service has been created
- Layers
   - new model : Piskel
   - new model : Layer
   - removed model : Framesheet
   - a Layer is made of Frames (similar to the previous Framesheet)
   - a Piskel is made of Layers
   - new controller : PiskelController : responsible for knowing the current layer, the current frame, merging frames etc
   - the application creates a piskelController on startup and injects it in other controllers
   - a basic UI for layers has been created and is displayed below the animated preview
   - layers can be reordered, created, deleted

I took some assumptions for the Layers : 
- when a Frame is created, it is simultaneously created in all existing layers
- same when a Frame is cloned
- same when a Frame is deleted (would need a new feature btw : clean/blank a Frame)
- all Layers always have the same amount of Frames
- the frame previews only display the current Layer
- the drawing area always displays the 'other' layers with a light opacity (0.2) ; the current layer has an opacity of 1 of course
- the animated preview always shows a merged view (all layers merged) 

Known issues : 
- undo/redo is a bit buggy and should encompass actions such as 'switch layer', 'delete frame' etc
- model has changed and older framesheets cannot be loaded by this version of Piskel