Resolves issue with keyboardDidMoveBlock being called constantly despite the keyboard frame being the same

This pull requests changes the following,

- Added a new property that stores the previous keyboard rect.
- Modifies code within observeValueForKeyPath to check if the previous keyboard rect is the same as the current one and prevents the block from being called.