1. Is it necessary to have a new ViewModel for each and every View? If not, then can creating a single MasterViewModel is violation of MVVM?
Not really. You can have certain ViewModels that correspond to a large number of views, each showing the same data in a different format. In fact, this is the whole rationale of MVVM in the first place -- segregation of display and business rules so that display format can be changed by loading different views.
You can also have one View that corresponds to a number of different ViewModels. This is code reuse on the display UI.
2. How will ViewModels communicate with each other?
Usually ViewModels communicate with Views via WPF Binding. That's why it is called MVVM and not MVC.
ViewModels can communicate with each other via a number of standard .NET means.
3. MainWindow.xaml.cs where I'm integrating all the Views, should have only the initialization of viewmodel and assigning the DataContext will there or I can put other codes also?
You usually separate each view into a separate XAML file. That makes it easy to substitue another view for a different format of the same data.
Usually, the recommendation is to separate your code into self-contained modules; i.e., one view one file, one viewmodel one file.
4. I am having my defined EventHandlers. Should I use them in ViewModel or outside of model-view-viewmodel?
Events should should be handled in views if they are purely UI-driven (i.e. has nothing to do with the data).
If an event should affect some change in the underlying data (or do some action on the business rules), you can in turn raise an event on the ViewModel. Notice that this event on the ViewModel can be different from the event on the View/UI.