refactor(protractor): reorganize internal structure of elementFinder/webelement

- Allow chaining of actions (i.e. element(By.x).clear().sendKeys('abc))
- first(), last(), and get(index) are not executed immediately, allowing
    them to be placed in page objects
- Rework the way that elementFinder and wrappedWebElement is represented
- Breaking changes:
  - element.all is chained differently
      Before: element(By.x).element.all(By.y)
      Now:    element(By.x).all(By.y)
    However, using element.all without chaining did not change,
      i.e. element.all(By.x)
  - Changed the way for retrieving underlying webElements
      Before: element(By.x).find(), element(By.x).findElement(By.y),
                and element(By.x).findElements(By.y)
      Now:    element(By.x).getWebElement(),
                element(By.x).element(By.y).getWebElement(),
                and element(By.x).element(By.y).getWebElements(),
                respectively