text: Title: Good First Issue [Deep Learning]: Add Support for Different Activation Functions in Multi-Layer Neural Networks
  Body: ### Issue Description:
  
  Currently, the `create_and_compile` (ForcasterRNN) function only supports a single activation function for all layers in a multi-layer neural network. To increase flexibility, it would be beneficial to allow users to specify different activation functions for each layer when multiple layers are present. This would enable more fine-grained control over the behavior of the model.
  
  ### Feature Request:
  
  Enhance the function to support different activation functions for each layer in the network. This should apply both to the recurrent and dense layers, allowing users to pass a list of activation functions corresponding to each layer.
  
  ### Acceptance Criteria:
  - [ ] Modify the function to accept a list of activation functions for both recurrent and dense layers.
    - If a single activation function is provided, it should be applied to all layers (as in the current behavior).
    - If a list is provided, each layer should use the corresponding activation function from the list.
  - [ ] Validate that the number of activation functions matches the number of layers in the network.
  - [ ] Update the documentation and docstrings to explain the new functionality.
  - [ ] Add unit tests to verify the behavior for both single and multiple activation functions.
  
  ### Example:
  
  ```python
  # Example with different activation functions for each layer
  model = create_and_compile(
      lags=10, 
      n_series=5, 
      recurrent_units=[32, 64], 
      dense_units=[64, 32], 
      optimizer="adam", 
      activation=["relu", "tanh"],  # List of activation functions
      loss="mse",
      compile_kwargs={}
  )
  ```
  
  In this example, the first recurrent layer would use `"relu"` and the second recurrent layer would use `"tanh"`. Similarly, for dense layers, different activation functions can be applied as specified by the list.
  
  ### Notes:
  - Ensure backward compatibility: If a single activation function is passed, it should be applied to all layers (recurrent or dense), preserving the current behavior.
  - If a list of activation functions is passed, ensure that it matches the number of layers for proper assignment.
  - Provide clear error messages if the list of activation functions does not match the number of layers.
  
  This feature will allow users to customize the behavior of each layer more precisely, opening up possibilities for more advanced model designs.