Issue title: recompile() does not load newly changed function
 Issue body: ### Environment

* Elixir & Erlang versions (elixir --version): 
```
elixir --version
Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.6.4 (compiled with OTP 20)
```
* Operating system:
```
macOS High Sierra 10.13.4
```
### Current behavior

After changing the source file and executing recompile in running iex session, the function doesn't reflect the change.


![recompile-issue](https://user-images.githubusercontent.com/585764/38240350-a7d34b70-372f-11e8-83af-b55b23688110.gif)


### Expected behavior

Expected that new changed be compiled and reflect the changes


--

Please let me know if I can provide more debugging output to tackle the issue.
 Comments: 
 Comment 0: It works fine here. :) Is your editor using anything that is recompiling the files behind the scenes? If that's the case, your editor is the one recompiling so IEx is not going to recompile it again.
 Comment 1: Yup 🤦‍♂️ 

For the record it was `Neomake`.

Thanks :)
 Comment 2: This is also happening for me with ALE on NeoVim. Seems like this would be an issue for most editors/IDEs that try to run any kind of static analysis requiring a compile.

@josevalim Is it possible to have IEx load the recompiled code into memory instead of spitting out :noop if it noticed that the code was recompiled already but different than what's currently loaded?
 Comment 3: The VSCode plug-in provides compiler feedback and does not have this issue. I don't know how it achieves that, but it's definitely possible.
 Comment 4: `VSCode` plug-in is using another path to compile the codes:
```
<app_dir>/.elixir_ls/build/test/lib
```

I suppose that's the way to go
{'source': 'GithubIssues', 'repo_name_with_owner': 'elixir-lang/elixir', 'issue_id': 310756317, 'repo_stars': 20945.0}